我有一个像'^(a|ab|1|2)+$'
这样的正则表达式,想要得到所有序列......
例如re.search(reg,'ab1')我想得到('ab','1')
我可以使用'^(a|ab|1|2)(a|ab|1|2)$'
模式获得的等效结果,
但我不知道有多少块与(模式)+
这是可能的,如果是的话 - 怎么样?
答案 0 :(得分:4)
试试这个:
import re
r = re.compile('(ab|a|1|2)')
for i in r.findall('ab1'):
print i
ab
选项已移至第一位,因此它将与ab
匹配,仅支持a
。
findall方法匹配您的正则表达式更多次并返回匹配组的列表。在这个简单的例子中,您将只返回一个字符串列表。一个匹配的每个字符串。如果你有更多的组,你将获得一个元组列表,每个元组包含每个组的字符串。
这适用于你的第二个例子:
pattern = '(7325189|7325|9087|087|18)'
str = '7325189087'
res = re.compile(pattern).findall(str)
print(pattern, str, res, [i for i in res])
我正在从模式中删除^$
符号,因为如果findall必须找到多个子字符串,那么它应该搜索str中的任何位置。然后我删除了+
,以便它匹配模式中这些选项的单个出现。
答案 1 :(得分:3)
您的原始表达式与您希望的方式匹配,它只匹配整个字符串,并且不会为每个单独的匹配捕获单个组。使用重复运算符('+','*','{m,n}'),每次都会覆盖该组,并且只保存最终匹配。 documentation中提到了这一点:
如果一个组匹配多次,则只能访问最后一个匹配。
答案 2 :(得分:2)
我认为你不需要这个问题的正则表达式, 你需要一些递归图搜索功能