2013-03-07 6 views
5

Ich habe eine Regex, die ich in 3 separaten Quellen verifiziert habe als erfolgreich den gewünschten Text.C# Regex Pattern Conundrum

  1. http://regexlib.com/RETester.aspx
  2. http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx,
  3. http://sourceforge.net/projects/regextester/

Aber, wenn ich die Regex in meinem Code verwenden. Es erzeugt keine Übereinstimmung. Ich habe andere Regex mit diesem Code verwendet und sie haben zu den gewünschten Übereinstimmungen geführt. Ich bin ratlos ...

Ich weiß nicht, ob das Problem meine Regex oder mein Code ist.

Antwort

7

Das Problem ist, dass Ihr Text enthält eine \r\n, was bedeutet, dass es über zwei Zeilen aufgeteilt ist. Wenn Sie die gesamte Zeichenfolge übereinstimmen soll, müssen Sie die option gesetzt über mehrere Zeilen entsprechen, und das Verhalten des . zu ändern, in der \n (new-line Zeichen) enthalten angepasst

Regex FindRegex = new Regex(@RegexPattern, RegexOptions.Multiline | RegexOptions.Singleline); 
+0

bereits versucht, dass. Regex.Match (SampleText, @RegexPattern, RegexOptions.Multiline) .Groups [1] .Value.ToString() gibt eine leere Zeichenfolge zurück – s15199d

+0

was, wenn Sie die RegexOptions.Multiline | RegexOptions.Single auch –

+0

Danke Miky! Es benötigt sowohl Multiline als auch Singleline. – s15199d

0

Sie don‘ t brauchen RegexOptions.Multiline.

Das Problem in Ihrem Fall ist, dass der Punkt mit einem beliebigen Zeichen außer Zeilenumbruchzeichen (\r\ und \n) übereinstimmt.

Sie müssen also Ihr Regex-Muster wie folgt definieren: (?<=starttexthere)[\w\r\n]+(?=endtexthere), um den Text über die Zeilenumbrüche hinweg genau abzustimmen.

Hier ist ein Online-Lauf Beispiel: http://ideone.com/ZXgKar

+0

Das stimmt nicht überein mit http://regexlib.com/RETester.aspx – s15199d

+0

@ s15199d Ja, es passt *. Auch der Code im Ideone-Link funktioniert. – GolfWolf