^(\s+)
solo elimina el espacio en blanco de la primera línea. ¿Cómo elimino el espacio en blanco delantero de todas las líneas?Python: use la expresión regular para eliminar el espacio en blanco de todas las líneas
Respuesta
módulo de expresiones regulares de Python no sea por defecto multi-line ^
matching , por lo que debe especificar ese indicador explícitamente.
r = re.compile(r"^\s+", re.MULTILINE)
r.sub("", "a\n b\n c") # "a\nb\nc"
# or without compiling (only possible for Python 2.7+ because the flags option
# didn't exist in earlier versions of re.sub)
re.sub(r"^\s+", "", "a\n b\n c", flags = re.MULTILINE)
# but mind that \s includes newlines:
r.sub("", "a\n\n\n\n b\n c") # "a\nb\nc"
También es posible incluir la línea bandera para el patrón:
re.sub(r"(?m)^\s+", "", "a\n b\n c")
Una solución más fácil es evitar expresiones regulares debido a que el problema original es muy simple:
content = 'a\n b\n\n c'
stripped_content = ''.join(line.lstrip(' \t') for line in content.splitlines(True))
# stripped_content == 'a\nb\n\nc'
'"^\ s + "' también elimina las líneas vacías –
puede probar strip()
si desea eliminar parte delantera y trasera, o lstrip()
si delante
>>> s=" string with front spaces and back "
>>> s.strip()
'string with front spaces and back'
>>> s.lstrip()
'string with front spaces and back '
for line in open("file"):
print line.lstrip()
Si realmente desea utilizar expresiones regulares
>>> import re
>>> re.sub("^\s+","",s) # remove the front
'string with front spaces and back '
>>> re.sub("\s+\Z","",s)
' string with front spaces and back' #remove the back
nowhite = ''.join(mytext.split())
NO espacios en blanco se mantendrá como usted pidió (todo se pone como una palabra). Más útil es juntar todo con ' '
o '\n'
para mantener las palabras por separado.
Vas a tener que utilizar la opción re.MULTILINE:
re.sub("(?m)^\s+", "", text)
El "(? M)" parte permite multilínea.
@AndiDog reconoce en su respuesta (actualmente aceptada) que mastica nuevas líneas consecutivas.
Así es cómo solucionar esa deficiencia, que se debe al hecho de que \n
es AMBOS espacios en blanco y un separador de línea. Lo que tenemos que hacer es crear una nueva clase que incluya solo espacios en blanco que no sean nueva línea.
Queremos whitespace and not newline
, que no se puede expresar directamente en una clase nueva. Vamos a reescribir eso como not not (whitespace and not newline)
es decir not(not whitespace or not not newline
(gracias, Augustus) es decir not(not whitespace or newline)
es decir [^\S\n]
en notación re
.
Así:
>>> re.sub(r"(?m)^[^\S\n]+", "", " a\n\n \n\n b\n c\nd e")
'a\n\n\n\nb\nc\nd e'
que en realidad no necesitan expresiones regulares de este mayor parte del tiempo. Si sólo está buscando para eliminar común hendidura a través de múltiples líneas, tratar el módulo textwrap
:
>>> import textwrap
>>> messy_text = " grrr\n whitespace\n everywhere"
>>> print textwrap.dedent(messy_text)
grrr
whitespace
everywhere
Tenga en cuenta que si el sangrado es irregular, esto será mantenida:
>>> very_messy_text = " grrr\n \twhitespace\n everywhere"
>>> print textwrap.dedent(very_messy_text)
grrr
whitespace
everywhere
- 1. expresión regular para el espacio en blanco y luego terminar la línea
- 2. expresión regular para no espacio en blanco b/w texto
- 3. En VIM, ¿cómo puedo eliminar todas las líneas hasta que se encuentre una expresión regular?
- 4. eliminar líneas en blanco adicionales en emacs
- 5. coincidencia de varias líneas en la expresión regular de python
- 6. Expresión regular: partida de inicio o espacio en blanco
- 7. Problema con la expresión regular para eliminar las etiquetas HTML
- 8. Expresión regular cualquier carácter excepto un espacio en blanco
- 9. Expresión regular eliminando todas las palabras más cortas que n
- 10. eliminar líneas con partido SED una expresión regular especial
- 11. ¿Cómo borrar todas las líneas en blanco en el archivo con la ayuda de python?
- 12. Cómo eliminar líneas vacías con o sin espacio en blanco en Python
- 13. AWK eliminar líneas en blanco
- 14. Expresión regular para eliminar metadatos
- 15. ¿Cómo habilitar el modo insensible al espacio en blanco de la expresión regular en PHP?
- 16. Expresión regular que rechaza todas las entradas?
- 17. expresión regular para despojar a los comentarios y observaciones de varias líneas y líneas vacías
- 18. Eliminar la línea en blanco en Eclipse
- 19. JavaScript Expresión regular "Carácter de espacio único"
- 20. Expresión regular de Python
- 21. Expresión regular: coincide con todas las palabras excepto
- 22. Eliminar espacio en blanco inicial del archivo
- 23. expresión regular para coincidir líneas que no contengan una palabra
- 24. Función Xpath para eliminar el espacio en blanco
- 25. Usando variables en la expresión regular de Python
- 26. Eliminar exceso de espacio en blanco de una cadena
- 27. use la expresión regular en if-condition en bash
- 28. ¿Cómo podría destacar vim el espacio en blanco redundante y todas las pestañas?
- 29. Herramienta Git para eliminar líneas de la escena si solo consisten en cambios en el espacio en blanco
- 30. Reemplace las líneas nuevas, pero conserve las líneas en blanco
espacios en blanco incluye caracteres de nueva línea, lo que significa que todo terminará en una sola línea, si usa esto en una cadena multilínea. ¡muéstranos algo para que podamos ayudar a entender la pregunta! – rdrey
@rdrey: en realidad, '^' en el modo multilínea coincide * después * de cada nueva línea, por lo que no será un problema (excepto para "\ n \ n"). Ver mi respuesta – AndiDog
gracias por esa corrección. aprendiendo algo nuevo todos los días: D – rdrey