2010-11-30 32 views
12

Tengo un texto horrible que estoy limpiando usando varias expresiones regulares C#. Un problema que me ha dejado perplejo es que hay un número de cadenas \ r \ n 'en el texto, los caracteres reales no la línea se rompe.C# cómo Regex.Replace " r n" (los caracteres reales, no el salto de línea)

que he probado:

content = Regex.Replace(content, "\\r\\n", ""); 

y:

content = Regex.Replace(content, "\r\n", ""); 

pero ninguno de ellos trabajan. Al final tuve que usar:

content = content.Replace("\\r\\n", "\r\n"); 

para conseguir el proyecto terminado, pero no ser capaz de hacerlo en una expresión regular me molesta.

+0

¿te ha sido útil? http://stackoverflow.com/questions/1981947/how-can-i-remove-rn-from-a-string-in-c-can-i-use-a-regex – SubniC

+3

content.Replace (@ "\ r \ n "," \ r \ n ") es su mejor opción. – VVS

+1

@Jens: por supuesto. Quise decir que es la mejor opción y mucho mejor que usar una expresión regular para una tarea tan trivial. – VVS

Respuesta

20

\r, y \n tienen un significado especial en Regex, también, por lo que la barra diagonal inversa debe ser escapada. Entonces, esas barras invertidas necesita ser escapado de la secuencia de C#, lo que lleva a

content = Regex.Replace(content, "\\\\r\\\\n", ""); 

o

content = Regex.Replace(content, @"\\r\\n", ""); 
+0

+1 Me derrotaron :) –

-3

conjetura salvaje aquí:

var bslash = System.IO.Path.DirectorySeparatorChar.ToString(); 

content = content.Replace(bslash + "r" + bslash + "n", ""); 
5

Es una buena idea para entrar en el hábito de usar un literales cadenas literales (@"example") al escribir expresiones regulares en C#. En este caso es necesario lo siguiente:

content = Regex.Replace(content, @"\\r\\n", "\r\n"); 

lo contrario tienes que escapar de cada barra invertida dos veces: una vez para escapar de ella en la cadena # C, y luego una segunda vez para escapar de ellos para la expresión regular. De modo que una sola barra invertida se convertiría en cuatro barras diagonales inversas con una cadena estándar literal.

3
content = Regex.Replace(content, "\\\\r\\\\n", ""); 

podría funcionar. Más información here.

Cita:

En las cadenas literales C#, así como en C++ y muchos otros lenguajes .NET, el barra invertida es un carácter de escape. La cadena literal "\\" es una sola barra diagonal inversa . En expresiones regulares, la barra diagonal inversa también es un carácter de escape. La expresión regular \\ coincide con una sola barra invertida . Esta expresión normal como una cadena C#, se convierte en "\\\\". Así es: 4 barras diagonales inversas para que coincida con una sola.

Nota: tuve que escribir 8 barras invertidas en la penúltima oración para 4 barras invertidas que ser visualizado, ;-)

2

Dentro de una cadena de entrada especificada, Regex.Replace reemplaza cadenas que coinciden con un patrón de expresión regular con una cadena de reemplazo especificada.

Un uso típico sería

string input = "This is text with far too  much " + " whitespace."; 
    string pattern = "\\s+"; 
    string replacement = " "; 
    Regex rgx = new Regex(pattern); 
    string result = rgx.Replace(input, replacement); 

no parece que eso es lo que está tratando de hacer.

0

La pregunta es anterior pero ha habido un cambio.

string temp = Regex.Replace(temp, "\\n", " "); 

o lo suficientemente

string temp = Regex.Replace("tab d_space newline\n content here :P", @"\s+", " "); 
//tab d_space newline content here :P 

Esto funciona en aplicaciones de Windows universal y probablemente otros también mejor.

0

A mejor & respuesta simple está aquí. Funciona para mí usando Regex.

public static string GetMultilineBreak(this string content) 
{ 
    return Regex.Replace(content, @"\r\n?|\n", "<br>"); 
} 
Cuestiones relacionadas