Python 提取正则表达式匹配组的名称和范围

Python 提取正则表达式匹配组的名称和范围,python,regex,Python,Regex,我有一个正则表达式,看起来像: rgx = '(?P<foo>ABC)(?P<bar>DEF)?(?P<norf>HIJK)' 例如,输入字符串“ABCDEFHIJK”应生成输出: 'foo' -> (0, 3) 'bar' -> (3, 6) 'norf' -> (6, 10) 谢谢 您迭代匹配组的名称(groupdict的键)并打印相应的span属性: rgx = '(?P<foo>ABC)(?P<bar>

我有一个正则表达式,看起来像:

rgx = '(?P<foo>ABC)(?P<bar>DEF)?(?P<norf>HIJK)'
例如,输入字符串“ABCDEFHIJK”应生成输出:

'foo'  -> (0, 3)
'bar'  -> (3, 6)
'norf' -> (6, 10)

谢谢

您迭代匹配组的名称(groupdict的键)并打印相应的
span
属性:

rgx = '(?P<foo>ABC)(?P<bar>DEF)?(?P<norf>HIJK)'
p = re.compile(rgx, re.IGNORECASE)
m = re.match(p, 'ABCDEFHIJKLM')

for key in m.groupdict():
    print key, m.span(key)
编辑:由于字典的键是无序的,因此您可能希望显式选择键的迭代顺序。在下面的示例中,
sorted(…)
是按相应的字典值(
span
元组)排序的组名列表:


迭代匹配组的名称(groupdict的键)并打印相应的
span
属性:

rgx = '(?P<foo>ABC)(?P<bar>DEF)?(?P<norf>HIJK)'
p = re.compile(rgx, re.IGNORECASE)
m = re.match(p, 'ABCDEFHIJKLM')

for key in m.groupdict():
    print key, m.span(key)
编辑:由于字典的键是无序的,因此您可能希望显式选择键的迭代顺序。在下面的示例中,
sorted(…)
是按相应的字典值(
span
元组)排序的组名列表:

您可以使用:

您可以使用:



将示例与预期输出一起发布。@laike9m span是属于regex MatchObject的方法。它告诉我们字符串的哪一部分是匹配的。@AvinashRaj aok,我发布了一个示例。然后只需使用
matchObj.span([group])
。将示例与预期的输出一起发布。@laike9m span是属于正则表达式MatchObject的方法。它告诉我们字符串的哪一部分是匹配的。@AvinashRaj aok,我发布了一个示例。然后使用
matchObj.span([group])
@georg-Oops。修正了打字错误。谢谢好多了,但还是没有雪茄
groupdict
是一个字典,因此不能保证结果的顺序。@georg True,但OP没有指定任何顺序是必需的。如果是的话,可以直接从
dict
@ajcr中选择键的顺序:注释旨在帮助提问者、回答者和未来的读者,而不是攻击任何人。与其为自己辩护,不如改进你的帖子,指出结果是随机排列的,并为那些需要排序的人建议一个解决方法。@georg如果我之前评论的语气是防御的,我道歉;这根本不是故意的。我将在我的答案中添加关于顺序的注释。@georg-Oops。修正了打字错误。谢谢好多了,但还是没有雪茄
groupdict
是一个字典,因此不能保证结果的顺序。@georg True,但OP没有指定任何顺序是必需的。如果是的话,可以直接从
dict
@ajcr中选择键的顺序:注释旨在帮助提问者、回答者和未来的读者,而不是攻击任何人。与其为自己辩护,不如改进你的帖子,指出结果是随机排列的,并为那些需要排序的人建议一个解决方法。@georg如果我之前评论的语气是防御的,我道歉;这根本不是故意的。我会在我的回答中加上关于秩序的注释。
foo (0, 3)
bar (3, 6)
norf (6, 10)
for key in sorted(m.groupdict().keys(), key=m.groupdict().get):
    print key, m.span(key)
p = re.compile(rgx, re.IGNORECASE)
m = p.match('ABCDEFHIJK')

for name, n in sorted(m.re.groupindex.items(), key=lambda x: x[1]):
    print name, m.group(n), m.span(n)