是否有一种方法可以在python中使用通配符获得正则表达式中的所有组



就像下面的代码一样,没有所有的组。有没有一种方法可以得到所有的组?谢谢~

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')

相关内容

  • 没有找到相关文章

最新更新