Biểu thức chính quy trong Python trả về true / false


114

Sử dụng biểu thức chính quy Python, làm thế nào bạn có thể nhận được một True/ Falsetrả về? Tất cả các lợi nhuận của Python là:

<_sre.SRE_Match object at ...>

Câu trả lời:


140

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(...):

21
re.match (...) sẽ trả về true nếu phần đầu của chuỗi khớp với mẫu thông thường. Trong khi tìm kiếm sẽ xác nhận mẫu ở bất kỳ đâu trong chuỗi.
Yu Shen

8
Nó có thể được mong muốn hơn để sử dụng if re.match(...) is None:thay thế
NuclearPeon

xin lỗi, bạn đã giải quyết các ý kiến ​​trong câu trả lời của bạn? Nó không rõ ràng với tôi, bạn có phiền làm rõ không?
Charlie Parker

2
Tôi có thể hỏi tại sao lại 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?
ytu

1
@ytu: Bởi vì sau đó bạn có thể làm mọi thứ khác mà bạn cần .
Ignacio Vazquez-Abrams

148

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()


1
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):
Aizzat Suhardi

2
@AizzatSuhardi, &là một phép toán theo kiểu bit . andsẽ là hoạt động boolean .
John La Rooy

1
cảm ơn @JohnLaRooy. đính chính:(re.search("a","abc") and True)
Aizzat Suhardi

điều này khác với câu trả lời của ignacio như thế nào?
Charlie Parker

2
Gói gọn trong đó boollàm cho ý định của người lập trình rõ ràng cho người đọc.
Guilherme Salomé

10

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.


6

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.


Bạn luôn nhận được giá trị trả về; Nonelà mặc định nếu không có gì được trả về rõ ràng.
Ignacio Vazquez-Abrams

Cảm ơn - đã sửa lại điều đó. Tôi chỉ đi theo những gì tôi thấy trong REPL.
Gavin Anderegg

4

Đây là phương pháp của tôi:

import re
# Compile
p = re.compile(r'hi')
# Match and print
print bool(p.match("abcdefghijkl"))

1
p = re.comp il e (r'hi ') :-P
Clay

vâng và nó trả về "False"
Ufos

nếu bạn thay đổi matchthành search, nó sẽ trả về True
alofgran

1

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.