2016-07-19 5 views
0

Ich versuche, ein String-Muster (`" isempty var0 ") aus einem langen String zu finden, den ich beim Lesen einer Datei bekomme, ich bin mir nicht sicher, ob Regex auf meine Anforderung anwendbar ist?String-Muster finden, Ist Regex Anwendbar auf meine Anforderung?

Um genauer zu sein in der erwarteten String-Muster isempty ist ein Schlüsselwort und es wäre einige Java-Variable daneben nach etwas Platz.

Eingang Strings kann so etwas wie diese:

"isempty var0 && v1== 56" 
"v2 == 50 || isempty var1" 
"Q3 == 100 || (isempty var2)" 
"isempty var3" 
"is thisnotisempty var4" 

Und erwartete Ausgabe ist:

"isempty var0" 
"isempty var1" 
"isempty var2" 
"isempty var3" 
null 

Derzeit bin ich versucht, das Muster() mit String.contains zu finden, String .CharAt(), String.indexOf() Methoden etc.

Obwohl ich nicht sicher bin, ob das mit Regex gelöst werden kann ?? Wenn es sein kann kann jemand eine Idee geben, Was könnte der Regex sein, um diese Art von Muster zu finden?

Vielen Dank!

Antwort

1

Versuchen Sie folgendes:

\bisempty\s+\w+ 

Online demo.

+0

Danke, es funktioniert Ich bin neu mit Regex, können Sie ein gutes Tutorial zu Beginn damit empfehlen? –

+1

@shriduttkothari Ich kenne keine Tutorials, sorry.Ich lernte Regex nur durch Lesen der Dokumentation. –

+0

Können Sie teilen, welche Dokumentation Sie verfolgt haben? –

1

Ihre Beispiele freuen sehr, wie Sie rohen Programmcode zu verarbeiten versuchen.

Die kurze Antwort ist JA, Sie können ein Regex-Muster verwenden, um eine Sache zu betrachten und herauszufinden, ob sie die Werte enthält, die Sie suchen. Etwas wie (\w+\s+\w+) wäre ein Ausgangspunkt, obwohl es wahrscheinlich komplizierter wäre.

Die lange Antwort ist, dass, wenn Sie Programmcode verarbeiten müssen Sie möglicherweise in die Verwendung einer strukturellen Parsing-API suchen. Eine schnelle Suche nach gut mit den Schlüsselwörtern java code parser stammt aus einer ganzen Reihe. Parser verstehen die Struktur Ihres Textes, wo er als Regex ihn nur testen und untersuchen kann. So kann ein Parser helfen, wenn Sie die Struktur des Codes überprüfen und bestimmte Syntaxstrukturen wie Ihr isempty x Konstrukt identifizieren müssen.

1

Ja, Sie können Regex dazu verwenden (in vielerlei Hinsicht). Eine Option ist replaceAll:

public static void main(String[] args) throws Exception { 
    String s1 = "isempty var0 && v1== 56"; 
    String s2 = "isempty var3"; 
    String s3 = "is thisnotisempty var4"; 
    String s4 = "is thisnotisempty 4var4"; // returns empty string. Java variable names cannot start with a number. 
    String s5 = "Q3 == 100 || (isempty var2)"; 
    String s6 = "isempty var3"; 

    System.out.println(s1.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s2.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s3.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s4.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s5.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
    System.out.println(s6.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1")); 
} 

O/P:

isempty var0 
isempty var3 


isempty var2 
isempty var3 

PS: Beachten Sie, dass Sie nicht null hier wird (wenn die Zeichenfolge nicht "haben" isempty someVar, stattdessen erhalten Sie leere Zeichenfolge

Verwandte Themen