re.match
được neo ở đầu chuỗi. Điều đó không có gì để làm với các dòng mới, vì vậy nó không giống như sử dụng ^
trong mẫu.
Như tài liệu re.match nói:
Nếu không có hoặc nhiều ký tự ở
đầu chuỗi khớp với mẫu biểu thức chính quy, hãy trả về một MatchObject
thể hiện tương ứng . Trả về None
nếu chuỗi không khớp với mẫu; lưu ý rằng điều này khác với một trận đấu có độ dài bằng không.
Lưu ý: Nếu bạn muốn xác định vị trí khớp ở bất kỳ đâu trong chuỗi, search()
thay vào đó hãy sử dụng .
re.search
tìm kiếm toàn bộ chuỗi, như tài liệu nói :
Quét qua chuỗi tìm kiếm vị trí trong đó mẫu biểu thức chính quy tạo ra kết quả khớp và trả về một MatchObject
thể hiện tương ứng . Trả về None
nếu không có vị trí nào trong chuỗi khớp với mẫu; lưu ý rằng điều này khác với việc tìm một kết quả có độ dài bằng 0 tại một số điểm trong chuỗi.
Vì vậy, nếu bạn cần khớp ở đầu chuỗi hoặc để khớp với toàn bộ chuỗi sử dụng match
. Nó nhanh hơn Nếu không thì sử dụng search
.
Tài liệu này có một phần cụ thể cho match
so vớisearch
cũng bao gồm các chuỗi nhiều dòng:
Python cung cấp hai hoạt động nguyên thủy khác nhau dựa trên các biểu thức thông thường: chỉ match
kiểm tra một kết quả khớp
ở đầu chuỗi, trong khi search
kiểm tra xem có khớp
ở bất kỳ đâu trong chuỗi không (đây là mặc định Perl thực hiện).
Lưu ý rằng match
có thể khác với search
ngay cả khi sử dụng biểu thức chính quy bắt đầu bằng '^'
: '^'
chỉ khớp ở đầu chuỗi hoặc trong
MULTILINE
chế độ cũng ngay lập tức theo dòng mới. Các “ match
” hoạt động thành công chỉ khi các trận đấu mẫu tại đầu của chuỗi
không phân biệt chế độ, hoặc tại vị trí bắt đầu được đưa ra bởi tùy chọn pos
tham số bất kể đến trước xuống dòng nó.
Bây giờ, nói đủ rồi. Thời gian để xem một số mã ví dụ:
# example code:
string_with_newlines = """something
someotherthing"""
import re
print re.match('some', string_with_newlines) # matches
print re.match('someother',
string_with_newlines) # won't match
print re.match('^someother', string_with_newlines,
re.MULTILINE) # also won't match
print re.search('someother',
string_with_newlines) # finds something
print re.search('^someother', string_with_newlines,
re.MULTILINE) # also finds something
m = re.compile('thing$', re.MULTILINE)
print m.match(string_with_newlines) # no match
print m.match(string_with_newlines, pos=4) # matches
print m.search(string_with_newlines,
re.MULTILINE) # also matches