Estoy tratando de hacer coincidir una cadena hasta el final, pero si hay otra cadena separada por un espacio, entonces solo quiero hacer coincidir la primera cadena y no este patrón adicional. Este patrón adicional siempre comienza con:

(from

Aquí hay un ejemplo de un conjunto de cadenas:

M /trunk
M /trunk/src/chip/GCC/ARMCMx/STM32F4xx/vectors.c
A /trunk/src/hal/include/spdif.h (from /branches/spdif_446/src/hal/include/spdif.h:1078)
M /trunk/src/hal/platforms/STM32/SAI/sai_lld.h
A /trunk/src/hal/platforms/STM32/SPDIF (from /branches/spdif_446/src/hal/platforms/STM32/SPDIF:1078)
A /trunk/src/hal/src/spdif.c (from /branches/spdif_446/src/hal/src/spdif.c:1078)

Como puede ver, algunas de esas líneas tienen una cadena adicional después de que se muestra la ruta inicial. Mostrando de qué rama proviene mi código confirma. Solo quiero la parte inicial de la cadena, hasta el final del camino. No quiero la sección donde muestra de qué rama proviene. ¿Cómo haría para hacer esto?

Pensé que esto funcionaría:

(.+)[\s]

Pero coincide con toda la línea y no sé por qué. Gracias por tu ayuda.

1
cDreamer 4 abr. 2017 a las 23:05

2 respuestas

La mejor respuesta

Parece que podrías usar

^[A-Z]+\s+(\S+)

... y tome el primer grupo, vea una demostración en regex101.com .


Python
import re

string = """
M /trunk
M /trunk/src/chip/GCC/ARMCMx/STM32F4xx/vectors.c
A /trunk/src/hal/include/spdif.h (from /branches/spdif_446/src/hal/include/spdif.h:1078)
M /trunk/src/hal/platforms/STM32/SAI/sai_lld.h
A /trunk/src/hal/platforms/STM32/SPDIF (from /branches/spdif_446/src/hal/platforms/STM32/SPDIF:1078)
A /trunk/src/hal/src/spdif.c (from /branches/spdif_446/src/hal/src/spdif.c:1078)
"""

rx = re.compile(r'^[A-Z]+\s+(\S+)', re.MULTILINE)
files = rx.findall(string)
print(files)

# ['/trunk', '/trunk/src/chip/GCC/ARMCMx/STM32F4xx/vectors.c', 
#  '/trunk/src/hal/include/spdif.h', '/trunk/src/hal/platforms/STM32/SAI/sai_lld.h', 
#  '/trunk/src/hal/platforms/STM32/SPDIF', '/trunk/src/hal/src/spdif.c']

(.+)[\s] . [...] \s
0
Jan 4 abr. 2017 a las 20:21

Si solo quieres igualar antes de un posible ( es

(?m)^[^(\r\n]+

0
user557597user557597 4 abr. 2017 a las 21:26