对于我的硕士论文,我需要从公司收入电话记录中提取(演讲者、文本)元组。成绩单采用以下形式: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].*)*)
添加回答
举报
0/150
提交
取消