2016-04-25 18 views
1

Ich habe die folgenden regex, um Übereinstimmungen in einer Zeichenfolge zu finden, die 3 Zeichen entsprechen für ein Muster.Kann die Anzahl der Übereinstimmungen in einer Regex umgeleitet werden?

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

Ist es möglich, durch die Regex Schleife ({2} in der obigen regex Ändern {0},{1},{3},{4},{5} zu sein), so erhalte ich alle Zeichen < = Länge der Zeichenfolge entspricht?

In diesem Fall möchte ich alle 1,2,3,4,5,6 Zeichen Übereinstimmungen erhalten, die nicht mit einem Vokal beginnen.

wäre das Ergebnis

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

+0

Meinen Sie '{0,5}'? – TigerhawkT3

+0

mit '{0,5}' würde mich '['Banane', 'nana', 'na']' bekommen. Ich suche alle 1,2,3,4,5,6 Zeichen Übereinstimmungen –

Antwort

2

Sie können einfach Schleife über die Zahlen in einer for-Schleife und das Format in der gewünschten Anzahl mit %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) 

Dies ausdrucken:

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

Danke für die Lösung. Ich schätze es. –

2

so sein?

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

Demo:

>>> 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'] 
+0

Danke für die Lösung. Ich schätze es. –

Verwandte Themen