正则表达式中的匹配数可以循环吗?

时间:2016-04-25 22:09:08

标签: python regex

我有以下regex来查找字符串中与模式匹配3个字符的匹配项。

import re
s="banana"
print re.findall(r'(?=([^aeiou].{2}))',s,re.I)

是否可以循环使用正则表达式(将上述正则表达式中的{2}更改为{0},{1},{3},{4},{5}),以便获得所有字符匹配< =字符串的长度?

在这种情况下,我想获得所有不以元音开头的1,2,3,4,5,6个字符匹配。

结果将是

['b', 'n', 'n','ba','na','na','ban','nan','bana','nana','banan','banana']

2 个答案:

答案 0 :(得分:2)

喜欢这个吗?

import re
s = "banana"
for n in range(0, 6):
    print re.findall(r'(?=([^aeiou].{{{n}}}))'.format(n=n), s, re.I)

演示:

>>> sum((re.findall(r'(?=([^aeiou].{{{n}}}))'.format(n=n), s, re.I) for n in range(6)), [])
['b',
 'n',
 'n',
 'ba',
 'na',
 'na',
 'ban',
 'nan',
 'bana',
 'nana',
 'banan',
 'banana']

答案 1 :(得分:2)

您可以简单地循环使用for循环中的数字,并使用%d格式化所需的数字。

import re
s="banana"

result = []
for i in range(len(s)):
    part = re.findall(r'(?=([^aeiou].{%d}))'%i, s,re.I)
    result.extend(part)

print(result)

这将打印出来:

['b', 'n', 'n', 'ba', 'na', 'na', 'ban', 'nan', 'bana', 'nana', 'banan', 'banana']