2013-03-07 19 views
5

Mam regex, który zweryfikowałem w 3 różnych źródłach, z powodzeniem dopasowując żądany tekst.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/

Ale kiedy używam regex w kodzie. Nie tworzy dopasowania. Użyłem innego wyrażenia regularnego z tym kodem i spowodowały one pożądane dopasowania. Jestem zagubiony ...

string SampleText = "starttexthere\r\nothertexthereendtexthere"; 
string RegexPattern = "(?<=starttexthere)(.*?)(?=endtexthere)"; 
Regex FindRegex = new Regex(@RegexPattern); 
Match m = FindRegex.Match(SampleText); 

Nie wiem, czy problemem jest mój wyrażeń regularnych, czy mój kod.

Odpowiedz

7

Problem polega na tym, że Twój tekst zawiera numer \r\n, co oznacza, że ​​jest podzielony na dwie linie. Jeśli chcesz, aby dopasować cały ciąg trzeba ustawić option dopasować na wielu liniach, i zmienić zachowanie . włączenie (znak nowego wiersza) \n w dopasowane

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

Próbowałem już. Regex.Match (SampleText, @RegexPattern, RegexOptions.Multiline) .Groups [1] .Value.ToString() zwraca pusty ciąg – s15199d

+0

co jeśli dołączymy RegexOptions.Multiline | RegexOptions.Singleline oraz –

+0

Dzięki Miky! Potrzebował zarówno Multiline, jak i Singleline. – s15199d

0

You don” t need RegexOptions.Multiline.

Problem w twoim przypadku polega na tym, że kropka pasuje do dowolnego znaku oprócz znaków podziału wiersza (\r\ i \n).

Musisz więc zdefiniować wzór regex: (?<=starttexthere)[\w\r\n]+(?=endtexthere), aby dopasować tekst do linii podziału.

Oto próbka działa on-line: http://ideone.com/ZXgKar

+0

To nie pasowało zgodnie z http://regexlib.com/RETester.aspx – s15199d

+0

@ s15199d tak, * pasuje *. Również działa kod w łączu ideone. – GolfWolf