我有以下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']
答案 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']