Non posso riprodurre questo qui. L'ho provato con Python 2.7 e 3.1.
Una differenza tra finditer
e findall
è che il primo oggetti rendimenti regex partita mentre l'altro restituisce una tupla dei gruppi di cattura abbinati (o l'intera partita se non ci sono gruppi di cattura).
Così
import re
CARRIS_REGEX=r'<th>(\d+)</th><th>([\s\w\.\-]+)</th><th>(\d+:\d+)</th><th>(\d+m)</th>'
pattern = re.compile(CARRIS_REGEX, re.UNICODE)
mailbody = open("test.txt").read()
for match in pattern.finditer(mailbody):
print(match)
print()
for match in pattern.findall(mailbody):
print(match)
stampe
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
('790', 'PR. REAL', '21:06', '04m')
('758', 'PORTAS BENFICA', '21:10', '09m')
('790', 'PR. REAL', '21:14', '13m')
('758', 'PORTAS BENFICA', '21:21', '19m')
('790', 'PR. REAL', '21:29', '28m')
('758', 'PORTAS BENFICA', '21:38', '36m')
('758', 'SETE RIOS', '21:49', '47m')
('758', 'SETE RIOS', '22:09', '68m')
Se si desidera che la stessa uscita da finditer
come si sta ottenendo da findall
, è necessario
for match in pattern.finditer(mailbody):
print(tuple(match.groups()))
fonte
2010-09-22 06:28:46
Come si utilizza l'iteratore o determinare il numero di risultati restituiti? – geoffspear
utilizzando una corrispondenza per le partite e stampandole. Grazie. – simao
Puoi pubblicare un messaggio di posta elettronica con il quale stai riscontrando questo problema? – kindall