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

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

最佳答案

正则表达式仅产生非重叠匹配。因此,speaker 不能在您的模式中出现两次。您需要将其放入前瞻中:

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

这将捕获组 1 中的文本。

Demo.

关于Python正则表达式在同一行中查找短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39105698/

相关文章:

python - (Python) 如何获取pandas中多列总和的平均值

c# - 在 C# 中验证 FQDN

regex - Bash,如何提取 grep 出现并将它们存储在数组中

javascript - 正则表达式匹配除 anchor 标记一之外的所有电子邮件

ruby - 可变长度后视

python - 使用字典和数组将点符号字符串转换为嵌套的 Python 对象

python - 具有静态和非静态重载的类方法

python - 简化在Pybind11中为C++模板类生成包装器类的步骤:模板声明不能出现在 block 作用域中

python - Cython Numpy 代码并不比纯 python 快

python - Lookahead 捕获不需要的字符