Python正则匹配多行字符串:提取Applicants与Inventors间内容
嘿,我来帮你搞定这个申请人信息提取的问题~
你之前的正则只能拿到第一行申请人,核心原因是:虽然加了re.MULTILINE,但.*默认还是只匹配当前行的末尾,不会跨行,所以第二行的Chevron信息就被漏掉了。
这里给你两种靠谱的解决方案:
方法1:支持跨行匹配的正则
用re.DOTALL(别名re.S)模式让.能匹配换行符,然后用非贪婪匹配抓取Applicants:到\nInventors:之间的所有内容,最后再整理成清晰的列表:
import re my_str = '''PCT Filing Date: 2 December 2015 Applicants: Silixa Ltd. Chevron U.S.A. Inc. (Incorporated in USA - California) Inventors: Farhadiroushan, Mahmoud Gillies, Arran Parker, Tom''' # 匹配Applicants到Inventors之间的所有内容 regex = re.compile(r'Applicants:(.*?)\nInventors:', re.DOTALL) match_result = regex.search(my_str) if match_result: # 去掉前后空白,再按换行分割成单个申请人 applicants_raw = match_result.group(1).strip() applicants_list = [line.strip() for line in applicants_raw.split('\n') if line.strip()] print(applicants_list)
执行后会输出:
['Silixa Ltd.', 'Chevron U.S.A. Inc. (Incorporated in USA - California)']
方法2:字符串分割(更直观)
如果觉得正则有点绕,直接用字符串分割更简单,适合结构固定的文本:
my_str = '''PCT Filing Date: 2 December 2015 Applicants: Silixa Ltd. Chevron U.S.A. Inc. (Incorporated in USA - California) Inventors: Farhadiroushan, Mahmoud Gillies, Arran Parker, Tom''' # 先切出Applicants之后的内容,再切掉Inventors及之后的部分 applicants_section = my_str.split('Applicants:')[1].split('\nInventors:')[0] # 整理成干净的申请人列表 applicants_list = [line.strip() for line in applicants_section.split('\n') if line.strip()] print(applicants_list)
这个方法逻辑清晰,不需要记正则规则,输出结果和上面完全一样。
内容的提问来源于stack exchange,提问作者Houssam Hsm
相关产品推荐
相关产品推荐

