Expresión regular: busque espacios (tabulaciones / espacio) pero no líneas nuevas


96

¿Cómo puedo tener una expresión regular que pruebe espacios o pestañas pero no nuevas líneas? Lo intenté, \spero descubrí que también prueba las nuevas líneas.

Yo uso C # / WPF pero no debería importar.

Respuestas:


189

Usa clases de personajes: [ \t]


1
Detecta mi problema. Consulte también stackoverflow.com/a/25956935/292060 para una \hclase de carácter solo de Perl , pero muestra que hay muchos otros caracteres de espacio en blanco, en caso de que necesite agregarlos a la lista aquí.
goodeye

3
¿Por qué debería haber un espacio antes \t?
Ooker

4
@Ooker para capturar un espacio literal
codemonkee

Esto no coincidirá con otros tipos de espacios, como han mencionado otras respuestas.
Gus

1
¿Por qué un espacio antes de \ t?
Catbuilts

35

Prueba este juego de caracteres:

[ \t]

Esto solo coincide con un espacio o un tabulador.


14

Como señaló @ Eiríkr Útlendi, la solución aceptada solo considera dos espacios en blanco: la tabulación horizontal (U + 0009) y un espacio de ruptura (U + 0020). No tiene en cuenta otros caracteres de espacio en blanco, como los espacios que no se rompen (que están en el texto con el que estoy tratando de tratar). Se incluye una lista de caracteres de espacio en blanco más completa en Wikipedia y también se hace referencia en la respuesta de Perl vinculada . Se puede construir una solución simple de C # que tenga en cuenta estos otros caracteres mediante la resta de clases de caracteres

[\s-[\r\n]]

o, incluyendo la solución de Eiríkr Útlendi, obtienes

[\s\u3000-[\r\n]]

3

Nota: Para aquellos que se ocupan de texto CJK (chino, japonés y coreano), el espacio de doble byte (Unicode \u3000) no está incluido en \sninguna implementación que haya probado hasta ahora (Perl, .NET, PCRE, Python). Primero deberá normalizar sus cadenas (por ejemplo, reemplazando todas \u3000con \u0020), o tendrá que usar un conjunto de caracteres que incluya este punto de código además de cualquier otro espacio en blanco al que se dirija, como [ \t\u3000].

Si está utilizando Perl o PCRE, tiene la opción de utilizar la \habreviatura de espacio en blanco horizontal , que parece incluir el espacio de un solo byte, el espacio de doble byte y la pestaña, entre otros. Consulte el hilo Coincidir espacios en blanco pero no líneas nuevas (Perl) para obtener más detalles.

Sin embargo, esta \habreviatura no se ha implementado para .NET y C #, lo mejor que he podido decir.


1
Buen punto. Java \h(introducido en Java 8) incluye \u3000, pero \sno, a menos que establezca el modo UNICODE_CHARACTER_CLASS (introducido en Java 7).
Alan Moore

0

Si desea reemplazar el espacio debajo del código, funcionó para mí enC#

Regex.Replace(Line,"\\\s","");

Para pestaña

Regex.Replace(Line,"\\\s\\\s","");

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.