2011-01-11 10 views
10

Gibt es eine Möglichkeit, Zeilenumbruch und Tabulatorzeichen usw. in RegEx vollständig zu ignorieren? Zum Beispiel können die Zeilenumbruch und Tab-Zeichen überall und in beliebiger Reihenfolge in der Inhaltszeichenfolge gefunden werden.Wie ignoriert man Zeilenumbrüche und Tabs in RegEx?

... [CustomToken \t \r\n Type="User" \t \r\n Property="FirstName" \n /] ... [CT ... 

Das ist die RegulaererAusdruck, die ich zur Zeit bin mit:

(\[CustomToken).*?(\/\]) 

.NET API

Regex.Matches(string input, string pattern) 

Vielen Dank für Ihren Vorschlag.

Antwort

17

Wenn Sie nur, dass regex wollen, dass die Eingabe passen, alles, was Sie tun müssen, ist Einlinige Modus angeben:

Regex.Matches(input, @"\[CustomToken).*?(/\])", RegexOptions.Singleline); 

Der Punkt metacharacter normalerweise jedes Zeichen außer Zeilenvorschub (\n). Der Single-Line-Modus, auch bekannt als "dot-matches-all" oder "DOTALL" -Modus, ermöglicht auch die Anpassung von Zeilenvorschüben.

+0

.. +1 Danke ... Es funktioniert ... –

1

benötigen Sie die Registerkarte/Newline? Sie können das Tab/Newline-Zeichen immer durch ein leeres Zeichen ersetzen, um sie zu entfernen.

string mystring = "\t\nhi\t\n"; 

string mystring_notabs = mystring.Replace("\t",""); //remove tabs 

mystring = mystring_notabs.Replace("\n",""); //remove newline and copy back to original 
2

Es gibt keine Möglichkeit, jede Art von Zeichen mit Regex zu "ignorieren". Sie können den Groß- und Kleinbuchstaben ignorieren, aber darum geht es.

Ihre beste Wette ist, \s+ zu verwenden, wo Sie irgendeine Art von Leerzeichen erwarten würden. Die Klasse \s entspricht allen Leerzeichen, einschließlich Zeilenumbrüchen, Zeilenumbrüchen, Tabulatoren und Leerzeichen. Dadurch wird Ihr Regex-Muster viel schöner.

0

Ich hatte ein Problem mit einem mehrzeiligen XML-Wert. Ich wollte die Daten in einem Beschreibungsfeld, und ich wollte meinen C# -Code nicht ändern, um die Einzeilenoption zu verwenden, da ich reguläre Ausdrücke dynamisch aus einer Datenbank zum Parsen gelesen habe. Dies löste mein Problem, vor allem die (? S) an der Vorderseite:

(?s)(?<=<description>).*(?=<\/description>) 
Verwandte Themen