Nie mogę tego tutaj powtórzyć. Wypróbowałem go zarówno w Pythonie 2.7, jak i 3.1.
Jedna różnica między finditer
i findall
polega na tym, że pierwsza zwraca obiekty dopasowania do wyrażenia regularnego, podczas gdy druga zwraca krotkę dopasowanych grup przechwytywania (lub całe dopasowanie, jeśli nie ma grup przechwytywania).
So
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)
drukuje
<_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')
Jeśli chcesz tego samego wyjścia z finditer
jak dostajesz od findall
, trzeba
for match in pattern.finditer(mailbody):
print(tuple(match.groups()))
W jaki sposób korzystasz z iteratora lub określasz, ile wyników zwróci? – geoffspear
używanie meczu w meczach i ich drukowanie. dzięki. – simao
Czy możesz opublikować treść wiadomości e-mail, której dotyczy ten problem? – kindall