2016-02-18 17 views
5

Ich habe mit einer Regex zu kämpfen, um am Ende der Zeile zu stoppen.Regex: nicht übereinstimmende Ende der Zeile

Eingabe sieht wie folgt aus:

How text spacing looks in Notepad++

Einige Linien haben Werte (alle Zeichen enthalten kann) nach den Doppelpunkte, manche nicht. Es kann Räume auf beiden Seiten des Dickdarms geben, möglicherweise nicht.

Für Leitungen 2 und 4 die folgenden Arbeiten (dh Spiel 12 und 16 respectively):

Pink\s*:\s*(.*)\n 
Red\s*:\s*(.*)\n 

Aber für Linie 3 (wo es keinen Wert übereinstimmen), eine regex die obige Syntax liefert 16 , dh liest über das Ende der Zeile hinaus.

Kann jemand vorschlagen, was ich falsch mache? Ich benutze VBA.

+0

Gerade ein zusätzlicher Doppelpunkt vor 16 im Beispiel bemerkt, so ist es tatsächlich: 16, die zurückgegeben wird, aber das ist nicht relevant für die Frage. – QAer

+0

Sie müssen '\ s' durch' [\ t] 'ersetzen. Oder mit '[^ \ S \ r \ n]'. –

Antwort

3

Das Problem, das Sie haben, ist \s shorthand Zeichenklasse entspricht vertikalen und horizontalen Leerzeichen. Das heißt, es passt sowohl Leerzeichen als auch Newline-Sequenzen.

Daher müssen Sie es beschränken, um nur horizontalen Whitespace zu entsprechen.

Sie müssen \s durch [ \t] oder [^\S\r\n\v] ersetzen.

+2

Super, danke für diese Erklärung und Lösung. – QAer

Verwandte Themen