Regex para hacer coincidir más de 2 espacios en blanco pero no una nueva línea

87

Quiero reemplazar los más de 2 espacios en blanco en una cadena pero no nuevas líneas, tengo esta expresión regular: \s{2,}pero también coincide con nuevas líneas.

¿Cómo puedo hacer coincidir solo 2 o más espacios en blanco y no nuevas líneas?

Estoy usando c #

Bruno
fuente
@nihcap: en realidad, C # no tiene su propio sabor de expresiones regulares, es parte de la biblioteca común de .Net. En este caso, .Net y C # son etiquetas útiles.
Kobi

Respuestas:

159

Coloque los caracteres de espacio en blanco que desea hacer coincidir dentro de una clase de carácter. Por ejemplo:

[ \t]{2,}

coincide con 2 o más espacios o tabulaciones.

También puedes hacer:

[^\S\r\n]{2,}

que coincide con cualquier carácter de espacio en blanco excepto \ry \nal menos dos veces (tenga en cuenta que la capital Sen \Ses la abreviatura de [^\s]).

Bart Kiers
fuente
¿Qué quieres decir con "abreviatura de" en tu última oración? ¿Cómo se vería toda la expresión regular sin esta taquigrafía?
Lonnie Best
5
@LonnieBest en expresiones regulares, para secuencias de escape como \ w, a menudo es una convención que la secuencia de escape en mayúsculas es el conjunto de caracteres inverso de las secuencias de escape en minúsculas. Por ejemplo, \ d es inverso de \ D, \ s es inverso de \ S, \ w es inverso de \ W, etc. Y también, dentro de un conjunto de clases de caracteres delimitado por [] como [abc], es posible especificar un inverso usando [^ abc]. Por lo tanto, \ S es equivalente a [^ \ s], que también sería equivalente a la notación no permitida [^^ \ S], si estuviera permitida. (^^ no es una forma válida de representar un inverso de un inverso.)
Dejay Clayton
@DejayClayton Gracias, no lo sabía.
Lonnie Best
Esta respuesta funcionó, pero ¿por qué \s{2,}tomar nuevas líneas a continuación? Si fuera así \n\s{2,}, lo entendería. ¿Y por qué funciona escribir un espacio literal entre corchetes?
bit-less
"Esta respuesta funcionó, pero ¿por qué \ s {2,} toma nuevas líneas antes de hacerlo?" porque \scoincide con espacios, tabulaciones y saltos de línea. "¿Y por qué funciona escribir un espacio literal entre corchetes?", Bueno, err, porque sí. No sé qué más decir sobre eso :)
Bart Kiers
0

Regex para apuntar solo a dos espacios: [] {2,} Los corchetes en regex son la clase de carácter. Es decir, solo los caracteres allí. Aquí solo espacio. El siguiente corchete significa dos o más veces.

Johan
fuente