>>> match = re.findall('a.*?a', 'a 1 a 2 a 3 a 4 a')
>>> match
['a 1 a', 'a 3 a']
Come faccio a farlo stamparePython re.findall stampare tutti i modelli
['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a']
Grazie!
>>> match = re.findall('a.*?a', 'a 1 a 2 a 3 a 4 a')
>>> match
['a 1 a', 'a 3 a']
Come faccio a farlo stamparePython re.findall stampare tutti i modelli
['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a']
Grazie!
penso utilizzando un'asserzione lookahead positivo dovrebbe fare il trucco:
>>> re.findall('(?=(a.*?a))', 'a 1 a 2 a 3 a 4 a')
['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a']
re.findall
restituisce tutti i gruppi l'espressione regolare - compresi quelli in look-aheads. Funziona perché l'asserzione look-ahead non consuma alcuna stringa.
r = re.compile('a.*?a') # as we use it multiple times
matches = [r.match(s[i:]) for i in range(len(s))] # all matches, if found or not
matches = [m.group(0) for m in matches if m] # matching string if match is not None
print matches
dà
['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a']
Non so se è la soluzione migliore, ma qui ho testare ogni sottostringa raggiungendo alla fine della stringa per la corrispondenza con il modello di data.
È possibile utilizzare il modulo alternativo regex
che permette incontri si sovrappongono:
>>> regex.findall('a.*?a', 'a 1 a 2 a 3 a 4 a', overlapped = True)
['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a']
Sarà bello se/quando quel modulo mai sostituisce quella predefinita 're' modulo –
@ JonClements Sì! Mi piacerebbe. A tutti i vantaggi offerti da questo modulo, è anche ben supportato. Ho trovato un bug e segnalato allo sviluppatore del modulo. È stato risolto in 24 ore. – ovgolovin
lo ha cercato anche lui e non ha mai saputo che c'è un modulo "regex" meglio di "re" –
Questo è il modo per farlo +1 –