如何检查regex模式是否包含命名捕获组?我想根据regex的形式决定是使用re.findall还是re.finditer。
re.findall
re.finditer
mwngjboj1#
使用以下方法:
pat = '.*(?P<word>\w+\d+\b).+' # sample pattern has_named_group = bool(re.search(r'\(\?P<\w+>[^)]+\)', pat))
这也可以是一个函数:
def has_named_group(pat): return bool(re.search(r'\(\?P<\w+>[^)]+\)', pat))
kiayqfof2#
您可以使用Pattern.groupindex一个字典,它把(?P)定义的任何符号组名Map到组号。如果模式中没有使用符号组,则字典为空。例如
import re pattern = re.compile('(?P<mygroup>.*)') if pattern.groupindex: print("The pattern contains a named capturing group") else: print("The pattern does not contain a named capturing group")
产出
The pattern contains a named capturing group
2条答案
按热度按时间mwngjboj1#
使用以下方法:
这也可以是一个函数:
kiayqfof2#
您可以使用Pattern.groupindex
一个字典,它把(?P)定义的任何符号组名Map到组号。如果模式中没有使用符号组,则字典为空。
例如
产出