regular - regex*
Recorta el espacio en blanco desde el medio de la cuerda (7)
Estoy usando la siguiente expresión regular para capturar un campo de "descripción" de ancho fijo que siempre tiene 50 caracteres de longitud:
(?.{50})
Mi problema es que las descripciones a veces contienen una gran cantidad de espacios en blanco, por ejemplo
"FLUID COMPRESSOR "
¿Alguien puede proporcionar una expresión regular que:
- Recorta todos los espacios en blanco del final
- Contrae cualquier espacio en blanco entre las palabras en un solo espacio
¿Hay alguna razón en particular por la que solicite una expresión regular? Puede que no sean la mejor herramienta para esta tarea.
Un reemplazo como
s/[ /t]+/ /g
debe comprimir el espacio en blanco interno (en realidad, comprimirá el espacio en blanco inicial y final también, pero no parece que eso sea un problema), y
s/[ /t]+$/$/
se ocupará de los espacios en blanco al final. [Estoy usando la sintaxis sed
ish aquí. No dijiste qué sabor prefieres.]
Inmediatamente, no veo una manera de hacerlo en una sola expresión.
Variantes de Perl: 1) s / / s + $ //; 2) s / / s + / / g;
Sustituir dos o más espacios por un espacio:
s/ +/ /g
Editar: para cualquier espacio en blanco (no solo espacios) puede usar / s si está usando una biblioteca de expresiones regulares compatible con Perl, y la sintaxis del paréntesis para el número de apariciones, por ejemplo
s//s/s+/ /g
o
s//s{2,}/ /g
Editar # 2: olvidé el sufijo global / g, gracias JL
str = Regex.Replace(str, " +( |$)", "$1");
Como comprimir espacios en blanco y recortar espacios en blanco alrededor de los bordes son operaciones conceptualmente diferentes, me gusta hacerlo en dos pasos:
re.replace("s//s+/ /g", str.strip())
No es el más eficiente, pero bastante legible.
/ (^ [/ s / t] + | [/ s / t] + ([/ s / t] | $)) / g reemplaza con $ 2 (comienza | medio / final)
DO#:
Solo si desea recortar todos los espacios en blanco, al inicio, al final y al medio.
string x = Regex.Replace(x, @"/s+", " ").Trim();