考虑句子:W U T样本A B C D
我正在尝试在re.groups
之后使用re.search
来获取A,B,C,D(“ Sample”之后的大写字母)。字母数可能会变化
很少失败的尝试:
A = re.search('Sample\s([A-Z])\s*([A-Z])*', 'W U T Sample A B C D')
A.groups()
('A', 'B')
A = re.search('Sample\s([A-Z])(\s*([A-Z]))*', 'W U T Sample A B C D')
A.groups()
('A', ' D', 'D')
A = re.search('Sample\s([A-Z])(?:\s*([A-Z]))*', 'W U T Sample A B C D')
A.groups()
('A', 'D')
我希望A.groups()
会给('A', 'B', 'C', 'D')
再举一个例子,“ XSS 55 D W Sample R G Y BH”应给出输出('R', 'G', 'Y', 'B', 'H')
答案 0 :(得分:1)
大多数正则表达式引擎(包括Python的引擎)将覆盖重复的捕获组。因此,您看到的重复捕获组将只是最后一个,而您当前的方法将行不通。解决方法是,我们可以先尝试隔离所需的子字符串,然后再应用re.findall
:
input = "W U T Sample A B C D"
text = re.search(r'Sample\s([A-Z](?:\s*[A-Z])*)', input).group(1) # A B C D
result = re.findall(r'[A-Z]', text)
print(result)
['A', 'B', 'C', 'D']