Sto usando Python 2.7.6. Non riesco a capire il seguente risultato da re.findall
:Python regex findall alternation behavior
>>> re.findall('\d|\(\d,\d\)', '(6,7)')
['(6,7)']
mi aspettavo quanto sopra per tornare ['6', '7']
, perché secondo l'documentation:
'|'
A | B, dove A e B possono essere arbitrarie, crea un regolare un'espressione che corrisponderà sia A o B. Un numero arbitrario di possono essere separati dalla '|' in questo modo. Può essere utilizzato all'interno dei gruppi (vedere di seguito). Mentre la stringa di destinazione viene scansionata, le REs sono separate da '|' sono provati da sinistra a destra. Quando un pattern corrisponde completamente, quel ramo è accettato. Ciò significa che una volta che A corrisponde, B non verrà testato ulteriormente, anche se produrrebbe una corrispondenza complessiva più lunga di . In altre parole, il '|' l'operatore non è mai avido. Per abbinare un letterale '|', usare \ |, o racchiuderlo all'interno di una classe di caratteri , come in [|].
Grazie per il vostro aiuto
'n [4]: re.findall (r '\ d | \ d, \ d \)', '(6,7)') Out [4]: ['6', '7'] 'Incredibile quale differenza (fa, eh? Ha trovato una possibile corrispondenza per la seconda cosa prima, quindi è quello che è stato abbinato. – NightShadeQueen
@hwnd L'esempio è inventato, I Sto cercando di capire il comportamento previsto qui. – Mayank
"I RE separati da '|' sono provati da sinistra a destra." Forse questo significa da sinistra a destra nella stringa? In questo caso, '(' è più a sinistra della prima cifra: –