【发布时间】:2019-10-06 10:14:44
【问题描述】:
我的字符串是一个成绩单,我想捕捉说话者,特别是他们的第二个名字(只有在完全大写时才需要匹配) 此外,我想匹配他们的演讲直到下一位演讲者开始,我想最终在一个巨大的文本文件中循环这个过程。
问题是匹配只返回一个匹配对象,即使有两个不同的说话者。我也尝试过使用 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 个匹配对象,这两个对象都有一个用于姓氏及其语音的组。还需要注意的是,我在线使用了 Regex 调试器,但是 python 风格在我的终端上给 Python 提供了不同的结果。
【问题讨论】:
-
只有当子字符串后面跟着单词“Senator”时,你的正则表达式才匹配(因为
"(?=Senator)")。您示例中的第二个子字符串不匹配,因为它后面没有“Senator”。