提问人:drexalves 提问时间:9/23/2022 更新时间:9/24/2022 访问量:83
如何匹配一个模式之前的所有内容,直到达到另一个模式
How to match everything before a pattern, until reach another pattern
问:
使用 Python 正则表达式,我试图匹配一个模式(包括换行符)之前的所有内容,直到达到另一个模式。 这是文本:
东风集团 2836 -07-0411B
IMUD - DHI211 (MOOYEHBF P/ SHDUF)
C7000039694 (PD MOFIBD PODF BAOJFD)
下面的代码匹配“C700”模式之前的所有内容。我需要“C700”之前的所有内容,但仅限于“IMUD”(包括它)。因此,结果应为“IMUD - DHI211 (MOOYEHBF P/ SHDUF)”
(?s)^.+?(?=C700\d*(?=\s))
在 regex101 中查看:链接
答:
0赞
slymore
9/24/2022
#1
这里有一个简单的正则表达式来做到这一点:
pattern = re.compile(r'(IMUD .*?)(C700)', flags=re.DOTALL)
解释:
- 第一组以非贪婪的方式捕获 IMUD 之后的所有内容(意味着当找到第二个捕获组时,它会停止捕获
(IMUD .*?)
(C700)
- 我们使用标志,以便 也匹配新行
re.DOTALL
.
\n
要获得您想要的内容,请仅检索匹配的第一个组
s = """DFGC 2836 -07-0411B
IMUD - DHI211 (MOOYEHBF P/ SHDUF)
C7000039694 (PD MOFIBD PODF BAOJFD)"""
res = pattern.search(s).group(1)
res
>>> 'IMUD - DHI211 (MOOYEHBF P/ SHDUF)\n'
评论
^[A-Z]{4} -.*?(?=\s*C700\d*\s)
m
s
i
(?mi)^\w+ - \w+\s*\([^()]*\)(?=\s*C700\d*\s)