无论我不知道如何从比赛中找出组名,问题都是非常基本的。让我用代码解释一下:
import re
a = list(re.finditer('(?P<name>[^\W\d_]+)|(?P<number>\d+)', 'Ala ma kota'))
如何获得 a[0].group(0)
匹配的组名 - 假设命名模式的数量可以更大?
示例被简化以学习基础知识。
我可以反转匹配 a[0].groupdict()
但它会很慢。
原文由 Chameleon 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以从已 编译的表达式 中获取此信息:
这使用
RegexObject.groupindex
属性:如果您只能访问匹配对象,则可以使用
MatchObject.re
属性 获取模式:如果您想知道哪个组匹配,请查看值;
None
表示一个组从未在比赛中使用过:number
组从未用于匹配任何内容,因为它的值为None
。然后,您可以使用以下命令找到正则表达式中使用的名称:
或者如果只有 一个 组可以匹配,您可以使用
MatchObject.lastgroup
:作为旁注,您的正则表达式有一个致命的缺陷;
\d
匹配的所有内容也与\w
匹配。你永远不会看到number
用于name
可以首先匹配的地方。反转模式以避免这种情况:但要考虑到以数字开头的单词仍然会使您的简单情况混淆: