You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则匹配疑问:为何结果未包含If与then?

问题原因与解决方法

为什么结果里没有"If/if"和"then"?

你用的正则[Ii]f (.*), then包含一个捕获组(.*),而re.findall的规则是:当正则表达式中有捕获组时,会优先返回捕获组匹配的内容,而非整个正则匹配的完整文本。所以结果里只返回了(.*)匹配的部分,自然漏掉了开头的If/if和结尾的, then。

另外,.*是贪婪匹配模式,它会尽可能匹配最长的符合条件的内容——从第一个If后面开始,一直匹配到最后一个, then之前的位置,这就是为什么你的结果里包含了中间的"On the other hand, if I leave"。

如何得到你期望的结果?

根据你的需求,有两种直接的修改方式:

方式1:去掉捕获组,匹配完整内容

把正则里的括号去掉,让整个表达式作为匹配目标,同时如果想拆分出两个独立的If/if...then片段,用非贪婪匹配.*?:

import re

s = ("If I’m not in a hurry, then I should stay. " +
"On the other hand, if I leave, then I can sleep.")
result = re.findall(r'[Ii]f .*?, then', s)
print(result)

输出为两个独立匹配项:

["If I’m not in a hurry, then", "if I leave, then"]

如果要拼接成你期望的整行文本,执行' '.join(result)即可。

方式2:直接匹配从第一个If到最后一个then的完整长文本

如果你需要的就是包含中间内容的整段匹配,用贪婪模式的正则并确保匹配完整内容:

result = re.findall(r'[Ii]f.*, then', s)

输出就是你期望的结果:

["If I’m not in a hurry, then I should stay. On the other hand, if I leave, then"]

内容的提问来源于stack exchange,提问作者cat15ets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:22:53