Evan Fosmark đã đã đưa ra một câu trả lời tốt. Đây chỉ là thông tin thêm.
Bạn có dòng này:
pattern = "6 of(.*)fans"
Nói chung, đây không phải là một biểu thức chính quy tốt. Nếu văn bản đầu vào là:
"6 của 99 người hâm mộ trong toàn bộ thiên hà của các fan"
Sau đó các nhóm phù hợp (những thứ bên trong dấu ngoặc đơn) sẽ là:
"99 người hâm mộ trong cả thiên hà của "
Vì vậy, chúng tôi muốn một mẫu sẽ chỉ lấy những gì bạn muốn, ngay cả với văn bản đầu vào ngớ ngẩn như trên.
Trong trường hợp này, nó không thực sự quan trọng nếu bạn phù hợp với không gian màu trắng, bởi vì khi bạn chuyển đổi một chuỗi thành một số nguyên, khoảng trắng sẽ bị bỏ qua. Nhưng hãy viết mẫu để bỏ qua khoảng trắng.
Với ký tự đại diện *
, có thể khớp với một chuỗi có độ dài bằng không. Trong trường hợp này, tôi nghĩ bạn luôn muốn một trận đấu không trống, vì vậy bạn muốn sử dụng +
để khớp một hoặc nhiều ký tự.
Python có kết hợp không tham lam, vì vậy bạn có thể viết lại với điều đó. Các chương trình cũ hơn với các biểu thức thông thường có thể không có kết hợp không tham lam, vì vậy tôi cũng sẽ đưa ra một mẫu không yêu cầu tham lam.
Vì vậy, mô hình phi tham lam:
pattern = "6 of\s+(.+?)\s+fans"
Các khác một:
pattern = "6 of\s+(\S+)\s+fans"
\s
có nghĩa là "bất kỳ không gian trắng" và sẽ phù hợp với một không gian, một tab, và một vài khác ký tự (chẳng hạn như "nguồn cấp dữ liệu biểu mẫu"). \S
có nghĩa là "bất kỳ không phải không gian trắng" và khớp với bất kỳ thứ gì mà \s
sẽ không phải là phù hợp.
Các mô hình đầu tiên thực hiện tốt hơn so với mô hình đầu tiên của bạn với các văn bản đầu vào ngớ ngẩn:
"6 của 99 người hâm mộ trong toàn bộ thiên hà của các fan"
Nó sẽ trả về một nhóm trận đấu chỉ 99
.
Nhưng thử văn bản này khác ngớ ngẩn đầu vào:
"6 của 99 fan cuồng"
Nó sẽ trả về một nhóm phù hợp của 99 crazed
.
Mẫu thứ hai sẽ không khớp với nhau, bởi vì từ "điên cuồng" không phải là từ "người hâm mộ".
Hmm. Dưới đây là một mô hình cuối cùng mà nên luôn luôn làm điều đúng ngay cả với các văn bản đầu vào ngớ ngẩn:
pattern = "6 of\D*?(\d+)\D*?fans"
\d
khớp với bất kỳ chữ số ('0'
-'9'
). \D
khớp với bất kỳ chữ số nào.
này thành công sẽ phù hợp với bất cứ điều gì đó là điều khiển từ xa không mơ hồ:
"6 của 99 người hâm mộ trong toàn bộ thiên hà của các fan"
Nhóm trận đấu sẽ 99
.
"6 của 99 fan cuồng"
Nhóm trận đấu sẽ 99
.
"6/99 41 người hâm mộ"
Nó sẽ không khớp, vì có số thứ hai trong đó.
Để tìm hiểu thêm về biểu thức chính quy của Python, bạn có thể đọc variouswebpages. Để có lời nhắc nhanh, bên trong trình thông dịch Python, hãy làm:
>>> import re
>>> help(re)
Khi bạn "cào" văn bản từ trang web, đôi khi bạn có thể chạy nhiều mã HTML. Nói chung, cụm từ thông dụng không phải là công cụ tốt để bỏ qua đánh dấu HTML hoặc XML (xem here); bạn có thể sẽ làm tốt hơn để sử dụng Beautiful Soup để phân tích cú pháp HTML và trích xuất văn bản, theo sau là cụm từ thông dụng để lấy văn bản bạn thực sự muốn.
Tôi hy vọng điều này thú vị và/hoặc giáo dục.
* không hoạt động * không phải là mô tả sự cố –
sidenote: bạn nên đặt tên 'dòng' 'dòng' – miku
Vui lòng đăng văn bản bạn đang cố gắng so khớp và (nếu có thể) kết quả bạn mong đợi. – Mike