gpt4 book ai didi

python - 为什么 Regex finditer 只返回第一个结果

转载 作者:行者123 更新时间:2023-12-01 07:51:02 26 4
gpt4 key购买 nike

我的字符串是文字记录,我想捕获说话者,特别是他们的第二个名字(仅在完全大写时才需要匹配)此外,我想匹配他们的演讲,直到下一个演讲者开始,我想最终在一个巨大的文本文件上循环这个过程。

问题是匹配仅返回一个匹配对象,即使有两个不同的说话者。我还尝试过使用 python 风格的在线正则表达式测试器,但是它们返回非常不同的结果(不知道为什么?)。

str = 'Senator BACK\n (Western Australia) (21:15): This evening I had the pleasure (...) Senator         DAY\n (South Australia) (21:34): Well, what a week it h(...) ' 

pattern = re.compile("(:?(Senator|Mr|Dr)\s+([A-Z]{2,})\s*(\(.+?\))\s+(\(\d{2}:\d{2}\):)(.*))(?=Senator)")

for match in re.finditer(pattern, str):
print(match)

我想要 2 个匹配对象,这两个对象都有一个包含姓氏和语音的组。值得注意的是,我还在线使用了正则表达式调试器,但是 python 风格在我的终端上为 Python 提供了不同的结果。

最佳答案

只需将正则表达式替换为:

(:?(Senator|Mr|Dr)\s+([A-Z]{2,})\s*(\(.+?\))\s+(\(\d{2}:\d{2}\):)(.*))(?=Senator|$)

演示:https://regex101.com/r/gJDaWM/1/

使用当前的正则表达式,您将强制执行以下条件:通过正向前视,每个匹配项后面都必须跟着 Senator

您实际上可能必须将正向前瞻更改为:

(?=Senator|Mr|Dr|$)

如果您想在参议员之上考虑先生博士

关于python - 为什么 Regex finditer 只返回第一个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56214211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com