在Python中,可以使用带有命名组的regex,例如:
m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
您可以按名称或使用groupdict
查找命名组的匹配文本:
如果我想要命名组的偏移量,我需要知道它们是哪个组号,这样我就可以使用类似start(1)
之类的东西。如何找出命名组与其组号之间的映射?如果它们匹配相同的字符串,则无法明确推断出这一点。在
这样做的目的是能够在一个没有原始正则表达式特定知识的函数中推断命名的带注释跨距(带偏移量)。在
如果改用编译的正则表达式,则可以获得组名到索引的映射。 像这样:
结果:
^{pr2}$或者您可以通过
^{3}$re
属性从匹配中访问pattern对象:注意,您可以将组名提供给
start
,而不是索引。在因此,您可能不需要将组名映射到其索引。在
不清楚你想达到什么目的,但如果有帮助,这里有两个有用的东西:
m
有一个groups
方法,该方法将向匹配的字符串返回一个元组。可以使用整数偏移。在首先定义组名的元组:
group_names = ("first_name", "last_name")
然后使用字符串格式化函数创建re:
m = re.match(r"(?P<{0}>\w+) (?P<{1}>\w+)".format(*group_names), "Malcolm Reynolds")
从现在起,您将有一个组名的唯一索引。
相关问题 更多 >
编程相关推荐