2011-01-11 4 views
10

Esiste un modo per ignorare completamente i caratteri di interruzione di riga e tabulazione ecc. In RegEx? Ad esempio, i caratteri di interruzione di riga e tabulazione possono essere trovati ovunque e in qualsiasi ordine nella stringa di contenuto.Come ignorare completamente l'interruzione di riga e la scheda in RegEx?

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

Il è l'espressione regolare che sono attualmente in uso:

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

API .NET

Regex.Matches(string input, string pattern) 

Grazie per il suggerimento.

risposta

17

Se si desidera solo che regex per abbinare tale ingresso, tutto quello che dovete fare è specificare la modalità SingleLine:

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

Il metacarattere punto corrisponde normalmente qualsiasi carattere tranne avanzamento riga (\n). La modalità Singleline, nota anche come modalità "dot-matches-all" o "DOTALL", consente di abbinare anche i linefeed.

+0

.. +1 Grazie ... Sta funzionando ... –

1

avete bisogno della scheda/newline? Puoi sempre sostituire il carattere tab/newline con un carattere vuoto per rimuoverli.

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

Non esiste alcun modo per "ignorare" qualsiasi tipo di carattere con espressioni regolari. Puoi ignorare il caso di lettere, ma questo è tutto.

La soluzione migliore è utilizzare \s+ dove ci si aspetta qualche tipo di spazio bianco. La classe \s corrisponderà a qualsiasi spazio vuoto, incluse le nuove righe, i ritorni a capo, le schede e gli spazi, e questo renderà molto più bello il modello di espressioni regolari.

0

Ho riscontrato un problema con un valore XML su più righe. Volevo i dati all'interno di un campo di descrizione e non volevo modificare il mio codice C# per utilizzare l'opzione a riga singola, poiché leggevo le espressioni regolari da un database per l'analisi. Questo ha risolto il mio problema, in particolare il (? S) nella parte anteriore:

(?s)(?<=<description>).*(?=<\/description>) 
Problemi correlati