首页 > 解决方案 > 为正则表达式添加额外的命名组

问题描述

您可以使用re.sub命名组在替换字符串中引用它们:

import re
re.sub(r"(?P<mygroup>.*):(.*)",
       r"\g<2> AND \g<mygroup>",
       "foo:bar")

-> "bar AND foo"

是否有可能提供其他组,例如,

re.sub(r"(?P<mygroup>.*):(.*)",
       r"\g<2> AND \g<mygroup> AND \g<anothergroup>",
       "foo:bar",
       supplemental_groups = {"anothergroup" : "hamspam"} )

-> "bar AND foo AND hamspam"

谢谢!

标签: pythonregex

解决方案


您可以传递一个可调用作为替换参数,并且您可以使用 lambda 传递您需要的任何其他“补充”组:

import re

def repl(m, extra_groups):
    return fr"{m.group(2)} AND {m.group('mygroup')} AND {extra_groups['anothergroup']}"

supplemental_groups = {"anothergroup" : "hamspam"}
print (re.sub(r"(?P<mygroup>.*):(.*)",
    lambda x, extra_groups=supplemental_groups: repl(x, extra_groups),
    "foo:bar"))

请参阅Python 演示。输出:bar AND foo AND hamspam


推荐阅读