Câu trả lời:
Matchcác đối tượng luôn đúng và Noneđược trả về nếu không có kết quả phù hợp. Chỉ cần kiểm tra tính đúng đắn.
if re.match(...):
if re.match(...) is None:thay thế
re được thiết kế như thế này? Nếu matchcác đối tượng luôn đúng, tại sao nó không quay trở lại Trueở vị trí đầu tiên, vì dù sao chúng ta cũng cần biết câu trả lời là đúng hay sai?
Nếu bạn thực sự cần Truehoặc False, chỉ cần sử dụngbool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
Như các câu trả lời khác đã chỉ ra, nếu bạn chỉ sử dụng nó như một điều kiện cho một ifhoặc while, bạn có thể sử dụng nó trực tiếp mà không cần góibool()
boolgiá trị là cần thiết khi câu lệnh điều kiện chứa phép toán số học boolean. ví dụ: if (re.search ("a", "abc") & True):
&là một phép toán theo kiểu bit . andsẽ là hoạt động boolean .
(re.search("a","abc") and True)
boollàm cho ý định của người lập trình rõ ràng cho người đọc.
Ignacio Vazquez-Abrams đã chính xác. Nhưng để nói rõ hơn, re.match()sẽ trả về một trong hai None, đánh giá Falsehoặc một đối tượng phù hợp, sẽ luôn Truenhư anh ta nói. Chỉ khi bạn muốn biết thông tin về (các) phần khớp với biểu thức chính quy của mình, bạn mới cần kiểm tra nội dung của đối tượng khớp.
Một cách để làm điều này chỉ là kiểm tra giá trị trả về. Bởi vì bạn nhận được <_sre.SRE_Match object at ...>nó có nghĩa là điều này sẽ được đánh giá là đúng. Khi biểu thức chính quy không được so khớp, bạn sẽ trả về giá trị Không, giá trị này được đánh giá là false.
import re
if re.search("c", "abcdef"):
print "hi"
Sản xuất hinhư đầu ra.
Nonelà mặc định nếu không có gì được trả về rõ ràng.
Bạn có thể sử dụng re.match()hoặc re.search(). 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 chính quy: chỉ re.match()kiểm tra kết quả khớp ở đầu chuỗi, trong khi re.search()kiểm tra kết quả khớp ở bất kỳ vị trí nào trong chuỗi (đây là những gì Perl thực hiện theo mặc định). tham khảo cái này