Câu trả lời:
Match
cá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 match
cá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 True
hoặ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 if
hoặc while
, bạn có thể sử dụng nó trực tiếp mà không cần góibool()
bool
giá 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 . and
sẽ là hoạt động boolean .
(re.search("a","abc") and True)
bool
là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á False
hoặc một đối tượng phù hợp, sẽ luôn True
như 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 hi
như đầu ra.
None
là 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