繁体   English   中英

匹配字符串但不匹配特定模式如果它在Python中

[英]Match String But Don't Match Specific Pattern If It's There In Python

我正在尝试将字符串一直匹配到结尾,但如果有另一个字符串由空格分隔,那么我只想匹配第一个字符串而不是这个额外的模式。 这个额外的模式始终以:

(from

这是一组字符串的示例:

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)

正如您所看到的,在显示初始路径后,其中一些行会有一个额外的字符串。 显示我的代码提交的分支来自哪个。 我只想要字符串的开头部分,一直到路径的末尾。 我不希望它显示它来自哪个分支的部分。 我该怎么做呢?

我认为这会奏效:

(.+)[\s]

但它匹配整条线,我不知道为什么。 谢谢你的帮助。

看来,你可以使用

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

...并参加第一组,请参阅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'^[AZ]+\\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 )。 所以,最后,它匹配包括换行符在内的每一行 - 这与完全不使用正则表达式相同。

如果你只想在可能之前匹配(它是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM