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.
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.
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
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.
\h
clase 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í.\t
?Prueba este juego de caracteres:
Esto solo coincide con un espacio o un tabulador.
fuente
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
o, incluyendo la solución de Eiríkr Útlendi, obtienes
fuente
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\s
ninguna implementación que haya probado hasta ahora (Perl, .NET, PCRE, Python). Primero deberá normalizar sus cadenas (por ejemplo, reemplazando todas\u3000
con\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
\h
abreviatura 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
\h
abreviatura no se ha implementado para .NET y C #, lo mejor que he podido decir.fuente
\h
(introducido en Java 8) incluye\u3000
, pero\s
no, a menos que establezca el modo UNICODE_CHARACTER_CLASS (introducido en Java 7).Si desea reemplazar el espacio debajo del código, funcionó para mí en
C#
Regex.Replace(Line,"\\\s","");
Para pestaña
Regex.Replace(Line,"\\\s\\\s","");
fuente