就像下面的代码一样,没有所有的组。有没有一种方法可以得到所有的组?谢谢~
import re
res = re.match(r'(?: ([a-z]+) ([0-9]+))*', ' a 1 b 2 c 3')
# echo ('c', '3'), but I want ('a', '1', 'b', '2', 'c', '3')
res.groups()
您可以使用re.finditer
来迭代匹配,将每个结果附加到空元组中:
import re
res = tuple()
matches = re.finditer(r' ([a-z]+) ([0-9]+)', ' a 1 b 2 c 3')
for m in matches:
res = res + m.groups()
输出:
('a', '1', 'b', '2', 'c', '3')
注意,在正则表达式中,外部组被删除,因为finditer
不需要。
您正在重复一个捕获组,它为您提供了最后一次迭代的值,即('c', '3')
您可以重复该模式以检查整个字符串是否符合该格式,然后在空格上分割并将其包装在元组中。
import re
m = re.match(r"(?: [a-z]+ [0-9]+)*$", " a 1 b 2 c 3")
if m:
print(tuple(m.group().split()))
输出('a', '1', 'b', '2', 'c', '3')