Python 使用正则表达式搜索文本的多个重复模式
我试图从一个文档中搜索文本,它有重复的部分,并且在文档中多次出现。但是,使用regex.match,它只显示文档中的第一个匹配项,而不显示其他匹配项 我要搜索的模式如下所示:Python 使用正则表达式搜索文本的多个重复模式,python,regex,Python,Regex,我试图从一个文档中搜索文本,它有重复的部分,并且在文档中多次出现。但是,使用regex.match,它只显示文档中的第一个匹配项,而不显示其他匹配项 我要搜索的模式如下所示: clauses 5.3, 12 & 15 clause 10 C, 10 CA & 10 CC 下一行显示了我正在使用的正则表达式 regex_crossref_multiple_1=r'(clause|Clause|clauses|Clauses)\s*\d+[.]?\d*\s*[a-zA-Z]*((,
clauses 5.3, 12 & 15
clause 10 C, 10 CA & 10 CC
下一行显示了我正在使用的正则表达式
regex_crossref_multiple_1=r'(clause|Clause|clauses|Clauses)\s*\d+[.]?\d*\s*[a-zA-Z]*((,|&|and)\s*\d+[.]?\d*\s*[A-Z]*)+'
用于匹配的代码和结果如下所示:
cross=regex.search(regex_crossref_multiple_1,des)
(des是包含文本的字符串)
为了打印结果,我使用了print(cross.group())
结果:
clauses 5.3, 12 & 15
然而,在des中还有其他模式,我没有得到结果
请让我知道有什么问题
可以从以下链接找到输入字符串(des)
您可以匹配
子句
,后跟可选的数字部分和可选的字符A-Z,然后使用重复模式匹配可选的逗号和数字
对于模式的最后一部分,您可以选择匹配、
、&
或和
后接数字和可选字符a-Z
\b[Cc]lauses?\s+\d+(?:\.\d+)?(?:\s*[A-Z]+)?(?:,\s+\d+(?:\.\d+)?(?:\s*[A-Z]+)?)*(?:\s+(?:[,&]|and)\s+\d+(?:\.\d+)?(?:\s*[A-Z]+)?)?\b
解释
单词边界\b
匹配子句,后跟数字和可选的小数部分[Cc]lauses?\s+\d+(?:\。\d+)
可以选择匹配空格字符和1+字符A-Z(?:\s*[A-Z]+)?
非捕获组(?:
匹配逗号、数字和可选的小数部分,\s+\d+(?:\。\d+)
可以选择匹配空格字符和1+字符A-Z(?:\s*[A-Z]+)?
关闭分组并重复0多次)*
非捕获组(?:
匹配1+空格字符和\s+(?:[,&]|和)
,,
和
或
和
匹配1+个空格字符,1+个数字和可选的小数部分\s+\d+(?:\。\d+)
匹配可选空格字符和1+字符A-Z(?:\s*[A-Z]+)?
关闭组并将其设置为可选)?
单词边界\b
通过字符串扫描,查找正则表达式模式生成匹配项的第一个位置
您可以使用re.findall或re.finditer。使用re.findall,只会突出匹配的最后一部分,例如,&15'、“&10 CC”等,这就是我使用re.search的原因。我还没有试过finditer,请看一下。您可以使用re.findall,通过匹配第一部分而不匹配&
部分来获得整个匹配,并将大写字符设置为可选。然后使用一个重复组,包括和部分[Cc]lauses?\s+\d+(?:\。\d+)(?:\s+[a-Z]+)(?:,\s+\d+(?:\。。\d+)(?:\s+[a-Z]+)\s+(?:[,&];)和)\s+\d+(?:[a-Z]+)++
这对我来说很好……谢谢你。你能用实际的文本而不是图片来更新问题吗?如果点击有助于解决你的问题,请随意回答✓ 在这个答案的左边。请注意,接受一个解决方案会得到2。
\b[Cc]lauses?\s+\d+(?:\.\d+)?(?:\s*[A-Z]+)?(?:,\s+\d+(?:\.\d+)?(?:\s*[A-Z]+)?)*(?:\s+(?:[,&]|and)\s+\d+(?:\.\d+)?(?:\s*[A-Z]+)?)?\b