如何使用正则表达式从获得通话记录中提取(扬声器、文本)元组?

对于我的硕士论文,我需要从公司收入电话记录中提取(演讲者、文本)元组。


成绩单采用以下形式:


OPERATOR: Some text with numbers, special characters and linebreaks.


NAME, COMPANY, POSITION: Some text with numbers, special characters and linebreaks.


NAME: Some text with numbers, special characters and linebreaks.

我想从文档中提取所有(扬声器、文本)元组。例如:


[("OPERATOR", "Some text with numbers, special characters and linebreaks."), ..]

到目前为止,我已经用re.findallPython 中的函数尝试了不同的正则表达式。

这是我的代码:


import re


# First approach:

r = re.compile(r"^([^a-z:]+?):([\s\S]+?)", flags=re.MULTILINE)

re.findall(r, example)


# Second approach:

r = re.compile(r"^([^a-z:]+?):([\s\S]+)", flags=re.MULTILINE)

re.findall(r, example)

第一种(非贪婪)方法的问题在于它没有捕获说话者的全文。


第二种(贪婪)方法的问题在于,它不会在下一个说话者出现时停止。


编辑:附加信息


文本组也可以包含双点。在某些情况下,在一行的第一个单词之后立即出现双点,例如“For\nexample: ...”

演讲者组也可以覆盖多行,例如当公司名称和职位描述很长时


慕无忌1623718
浏览 152回答 1
1回答

隔江千里

您可以在不使用的情况下进行匹配,[\s\S]+因为它将匹配包括新行在内的任何字符。对于第二个捕获组,您可以匹配.*,然后使用具有负前瞻的重复组,只要以下行不以(?:(?!\n[^a-z\r\n]+:)^([^a-z\r\n]+):(.*(?:(?!\n[^a-z\r\n]+:)[\r\n].*)*)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python