我有这样的成绩单:
speaker1 (caller): hello.
speaker2 (agent): thank you for calling.
speaker1 (caller): I need some help with my account 3429.
speaker2 (agent): Sure let me help.
它们的形式为'speakerN(来电者或代理人)'。我需要编写一个正则表达式来获取调用者和代理人对话的列表。所以对于上面的例子,我会输出:
['(caller): hello. ', '(agent): thank you for calling', '(caller): I need some help with my account 3429.', '(agent): Sure let me help.']
这是我到目前为止所拥有的:
aList = re.findall('speaker. (.*) speaker.|$', transcript)
print(aList)
我知道前面有一个扬声器N,我需要捕捉一些文本,然后是另一个扬声器N(表示新列表)或行尾。这是我试图捕获的逻辑,但是它将整个脚本放在一个列表元素中,而将空字符串放在第二个列表元素中。任何帮助将不胜感激。
答案 0 :(得分:1)
正则表达式只生成非重叠匹配。因此,您无法在模式中出现speaker
两次。你需要把它放在一个预测中:
speaker\d+ (\([^(]*?)(?=\s+speaker\d+|$)
这将捕获第1组中的文本。
答案 1 :(得分:0)
使用aList = re.findall('speaker\d+\s(.*?)(?=\sspeaker|$)', transcript)
.*?
会在发现另一个发言者时立即停止匹配,而.*
将保持匹配任何字符,直到最后一次出现。希望它有所帮助。
编辑:发言人\ d + ,.只匹配一个字符。
编辑:如果说'发言人'在谈话之间进来。所以使用
aList = re.findall('speaker\d+\s*(.*?)(?=\sspeaker\s*\(|$)', transcript)