import re
regex = re.compile(r"""
\G #anclado a \A o fin de última coincidencia
( #Grupo 1: Caracteres previos
[^\h\\'\v]*+ # Todo menos caracteres especiales
(?: # Repetir infinitas veces
(?: # Alternativas:
(?!^)\h # a. espacio simple que no
(?!\h|$) # está al ppio ni al final
| \v # b. línea nueva
| \\. # c. cualquier escape
| '[^'\\]*+ # d. comillas
(?:(?:''|\\.)[^'\\]*)*
' #
) #
[^\h\\'\v]*+ # Seguido de más texto no especial
)* #
) #(fin G1)
(?: #Espacios:
^\h+ # a. al ppio de la línea
| \h+(\h|$) # b. en el medio o al final
) #
""", flags=re.MULTILINE | re.VERBOSE)
test_str = (" select * , fooo , \n"
" a, \n"
"b,\n"
"c\n"
" from\n"
"table\n"
"where a = 'a b'\n"
" or campo = 'borra los espacios \\'no?'\n"
"and c = 1;")
subst = "$1$2"
result = regex.sub(subst, test_str)
if result:
print(result)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html