为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕无忌1623718 2021-10-10 15:22:58
对于我的硕士论文,我需要从公司收入电话记录中提取(演讲者、文本)元组。成绩单采用以下形式: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: ...”演讲者组也可以覆盖多行,例如当公司名称和职位描述很长时
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

您可以在不使用的情况下进行匹配,[\s\S]+因为它将匹配包括新行在内的任何字符。

对于第二个捕获组,您可以匹配.*,然后使用具有负前瞻的重复组,只要以下行不以(?:(?!\n[^a-z\r\n]+:)

^([^a-z\r\n]+):(.*(?:(?!\n[^a-z\r\n]+:)[\r\n].*)*)


查看完整回答
反对 回复 2021-10-10
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信