我的字符串是笔录,我想捕获说话者,特别是他们的名字(只有大写时才需要匹配) 另外,我想匹配他们的语音,直到下一位发言者开始讲话为止,我希望最终在一个巨大的文本文件上循环此过程。
问题是即使有两个不同的说话者,比赛也只会返回一个比赛对象。我也尝试过使用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带来了不同的结果。
答案 0 :(得分:1)
只需将正则表达式替换为:
(:?(Senator|Mr|Dr)\s+([A-Z]{2,})\s*(\(.+?\))\s+(\(\d{2}:\d{2}\):)(.*))(?=Senator|$)
演示:https://regex101.com/r/gJDaWM/1/
使用当前的正则表达式,您将强制执行以下条件:每次匹配都必须通过正向提前Senator
进行。
您实际上可能必须将正向前瞻更改为:
(?=Senator|Mr|Dr|$)
如果您要考虑Mr
上方的Dr
和Senator
。