Wie kann Whitespace von einer Regex-Erfassungsgruppe abgeschnitten werden?

8

Die zu untersuchenden Strings ähneln den folgenden (beachten Sie den Leerraum zwischen den Klammern):

%Vor%

Der Ausdruck, den ich gerade verwende ...

%Vor%

... fängt jeden Text innerhalb der Klammern erfolgreich ein, aber er nimmt auch den führenden und nachfolgenden Raum, so dass ich am Ende folgendes bekomme:

%Vor%

Aber was ich suche ist:

%Vor%

Wie kann die Regex davon überzeugt werden, in diesen Beispielen nicht den Leerraum zu erfassen? (Mit Ausnahme von eingebetteten Leerzeichen - wie etwa zwischen den Wörtern in "Telefonnummer").

(Hinweis: Ich weiß, dass ich es einfach aus der erfassten Variablen schneiden konnte, nachdem der Ausdruck fertig ist, aber ich versuche es innerhalb von zu tun Ausdruck.)

Danke für irgendwelche Ideen! Unten ist der genaue Code, mit dem ich das teste:

%Vor%     
Monte Hurd 16.02.2013, 03:08
quelle

2 Antworten

2

Ich werde das Schritt für Schritt durchgehen.

Erstens ist ([^\])]*) falsch. Dies bedeutet "eine Folge von 0 oder mehr Zeichen, so lang wie möglich, nicht enthalten] oder)."

Zum Beispiel für diesen Ausdruck:

%Vor%

... der Adressteil wird übersprungen, da "Adresse)" nicht mit [^\)]]* übereinstimmt (was "eine Folge von null oder mehr Zeichen, nicht inklusive) und] bedeutet."

Wir wollen stattdessen ([^\]]*) , was nicht übersprungen wird.

Als nächstes wollen wir alle Räume um das Capture essen. Dafür verwenden wir zwei  * -Sequenzen, eine auf jeder Seite des Captures:

\[ *([^\]]*) *\]

Jetzt müssen wir knifflig werden! Der [^\]]* ist standardmäßig gierig. Das bedeutet, dass einige der Räume zu beiden Seiten von ihm übereinstimmen und somit in der Erfassung enthalten sind! Wir möchten stattdessen die nicht gierige Version [^\]]*? verwenden. Dies bedeutet "eine Folge von 0 oder mehr Zeichen, die nicht enthalten sind", die so kurz wie möglich ist, während sie dem Rest des regulären Ausdrucks entspricht. "

\[ *([^\]]*?) *\]

    
Steven Fisher 16.02.2013, 03:11
quelle
3
%Vor%

oder

%Vor%

Achten Sie darauf, die oben genannten Leerzeichen einzugeben.

Dies wird die Leerzeichen nicht erfassen: NSLog-Ausgabe
[Name]
[Adresse]
[zip]
[Telefonnummer]

Das "?" macht das vorhergehende Metazeichen nicht gierig, gierig ist der Standardwert.

    
zaph 16.02.2013 03:29
quelle

Tags und Links