Tôi không thể tái tạo ở đây. Đã thử nó với cả Python 2.7 và 3.1.
Một khác biệt giữa finditer
và findall
là số cũ trả về đối tượng đối sánh regex trong khi cột kia trả về một nhóm các nhóm chụp phù hợp (hoặc toàn bộ kết quả nếu không có nhóm chụp).
Vì vậy
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)
in
<_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')
Nếu bạn muốn đầu ra tương tự từ finditer
như bạn đang nhận được từ findall
, bạn cần
for match in pattern.finditer(mailbody):
print(tuple(match.groups()))
Nguồn
2010-09-22 06:28:46
Bạn đang sử dụng trình vòng lặp hoặc xác định số lượng kết quả sẽ trả về? – geoffspear
sử dụng cho phù hợp trong các trận đấu và in chúng. cảm ơn. – simao
Bạn có thể đăng nội dung thư mà bạn đang gặp sự cố này không? – kindall