2011-01-11 62 views
10

¿Hay alguna manera de ignorar por completo los caracteres de salto de línea y tabulación, etc. en RegEx? Por ejemplo, los caracteres de salto de línea y tabulación se pueden encontrar en cualquier lugar y en cualquier orden en la cadena de contenido.¿Cómo ignorar por completo el salto de línea y la pestaña en RegEx?

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

El RegularExpression es el que actualmente estoy usando:

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

.NET API

Regex.Matches(string input, string pattern) 

Gracias por su sugerencia.

Respuesta

17

Si lo que desea es que la expresión regular para que coincida con la entrada, todo lo que necesita hacer es especificar el modo SingleLine:

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

El metacarácter de puntos que normalmente coincide con cualquier carácter excepto el avance de línea (\n). El modo de línea única, también conocido como modo "punto-coincide con todos" o "DOTALL", también permite que coincida con los avances de línea.

+0

.. +1 Gracias ... Está trabajando ... –

1

¿necesitas la pestaña/nueva línea? Siempre puedes reemplazar el carácter de tabulación/nueva línea con un carácter vacío para eliminarlos.

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

No hay forma de "ignorar" ningún tipo de carácter con expresiones regulares. Puede ignorar letter case, pero eso es todo.

Su mejor opción es usar \s+ donde esperaría algún tipo de espacio en blanco. La clase \s coincidirá con cualquier espacio en blanco, incluidas las líneas nuevas, los retornos de carro, las pestañas y los espacios, y esto hará que su patrón de expresiones regulares se vea mucho mejor.

0

Tuve un problema con un valor XML multilínea. Quería los datos dentro de un campo de descripción, y no quería cambiar mi código C# para usar la opción de una sola línea, ya que estaba leyendo dinámicamente expresiones regulares de una base de datos para analizar. Esto resolvió mi problema, particularmente el (?) En el frente:

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