Penso che l'espressione regolare corrisponda a da sinistra a destra. Quindi il primo motivo che corrisponde è la stringa vuota prima di 7...
. Se trova uno 9
, lo abbinerà davvero all'avidità: e prova a "mangia" (è la terminologia corretta) il maggior numero di caratteri possibile.
Se si interroga per:
>>> print(re.findall(r'9*',line));
['', '', '', '', '9999', '', '', '', '']
Si abbina tutte le stringhe vuote tra i personaggi e come si può vedere, 9999
è abbinato pure.
Il motivo principale è probabilmente la prestazione: se cerchi un pattern in una stringa di 10M + caratteri, sei molto felice se il pattern è già nei primi 10k caratteri. Non si vuole sprecare sforzi sulla ricerca del "più bello " match ...
EDIT
Con 0 o più verificarsi uno dei mezzi del gruppo (in questo caso 9
) viene ripetuto zero o più volte. In una stringa vuota, i caratteri vengono ripetuti esattamente 0 volte. Se si desidera far corrispondere i modelli in cui i personaggi si ripete una o più volte, è necessario utilizzare
9+
Questo si traduce in:
>>> print(re.search(r'9+', line));
<_sre.SRE_Match object; span=(4, 8), match='9999'>
re.search
per un modello che accetta la stringa vuota, è probabilmente non è molto utile poiché corrisponderà sempre alla stringa vuota prima dello l'inizio effettivo della stringa.
fonte
2014-10-14 23:28:02
Perché hai incollato uno screenshot della tua domanda nella tua domanda? Questo non ha nulla a che fare con questa domanda. Se hai una domanda su StackOverflow, pubblicala su [Meta StackOverflow] (http://meta.stackoverflow.com/), non nel mezzo di una domanda non correlata qui. – abarnert