Python正则表达式在同一行中查找短语

时间:2016-08-23 15:51:34

标签: python regex

我有这样的成绩单:

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(表示新列表)或行尾。这是我试图捕获的逻辑,但是它将整个脚本放在一个列表元素中,而将空字符串放在第二个列表元素中。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

正则表达式只生成非重叠匹配。因此,您无法在模式中出现speaker两次。你需要把它放在一个预测中:

speaker\d+ (\([^(]*?)(?=\s+speaker\d+|$)

这将捕获第1组中的文本。

Demo.

答案 1 :(得分:0)

使用aList = re.findall('speaker\d+\s(.*?)(?=\sspeaker|$)', transcript)

.*?会在发现另一个发言者时立即停止匹配,而.*将保持匹配任何字符,直到最后一次出现。希望它有所帮助。

编辑:发言人\ d + ,.只匹配一个字符。

编辑:如果说'发言人'在谈话之间进来。所以使用

aList = re.findall('speaker\d+\s*(.*?)(?=\sspeaker\s*\(|$)', transcript)