我有一个像这样的正则表达式'^(a|ab|1|2)+$'
,想得到这个的所有序列......
例如对于 re.search(reg, 'ab1') 我想得到 ('ab','1')
我可以用'^(a|ab|1|2)(a|ab|1|2)$'
模式得到等效的结果,但我不知道有多少块与 (pattern)+ 匹配
这是可能的,如果是的话 - 如何?
尝试这个:
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 中的任何位置。然后我删除+
了它,所以它匹配模式中这些选项的单个出现。
您的原始表达式确实与您想要的方式匹配,它只匹配整个字符串,并且不会为每个单独的匹配捕获单独的组。使用重复运算符('+'、'*'、'{m,n}'),每次都会覆盖组,并且只保存最终匹配。文档中提到了这一点:
如果一个组匹配多次,则只能访问最后一个匹配项。
我认为你不需要正则表达式来解决这个问题,你需要一些递归图搜索功能