python - 获取与 findall 匹配的所有捕获组
问题描述
嗨,我需要一个正则表达式来捕获与文本匹配的所有组
我有以下文字
"abc"
和这个正则表达式
compiled = re.compile("(?P<group1>abc)|(?P<group2>abc)")
compiled.findall("asd")
但输出如下:
("abc", "")
我期望的输出如下
("abc", "abc") # one match per capturing group that matches
编辑:
我需要达到的目标
我有大约 500 组事物,我想将文本分类到这些组中的每一个,所以我创建了一个捕获组,每个组都有一个正则表达式。这样我可以运行一次大的正则表达式,并获取匹配组的索引以知道哪个组匹配
例如,我有甜点的配料,想知道一个文本可能属于哪些甜点:
test = re.compile('(?P<dessert1>(?:apple))|(?P<dessert2>(?:apple|banana))|(?P<others>(?:other))')
那么如果我有字符串
apple
我想获得组“desert1”和“desert2”出于性能原因,我不能为每个甜点运行多个正则表达式
解决方案
您可以对其中一个捕获组使用积极的前瞻
(?=(?P<group1>abc))(?P<group2>\1)
import re
regex = r"(?=(?P<group1>abc))(?P<group2>(?P=group1))"
test_str = "abc"
print(re.findall(regex, test_str))
输出
[('abc', 'abc')]
或者更明确地代替反向引用\1
,用于(?P=group1)
匹配与捕获组命名相同的文本group1
(?=(?P<group1>abc))(?P<group2>(?P=group1))
推荐阅读
- vba - 如何创建一个循环,如果表格中的单元格包含字符,它将自动创建另一行单元格
- php - 如何使用 + & - 符号增加/减少数字?在php中
- angular - 角度重新渲染和 changeDetector
- java - JNA - 更改 Windows 光标
- java - 如何以编程方式布局视图
- css - 如何在 Firefox 上滚动滚动?
- javascript - 如何使用 Javascript 缩放以适应 HTML 中减少的 SVG 路径
- neo4j - 为什么多次合并的结果会减少?新4j
- python - 在 Python 中解释了这一行,其中条件位于范围规范之后。
- date - 如何在 Pervasive SQL 中读取日期?