การใช้นิพจน์ทั่วไปของ Python คุณจะได้รับTrue
/ False
ส่งคืนได้อย่างไร ผลตอบแทนของ Python ทั้งหมดคือ:
<_sre.SRE_Match object at ...>
การใช้นิพจน์ทั่วไปของ Python คุณจะได้รับTrue
/ False
ส่งคืนได้อย่างไร ผลตอบแทนของ Python ทั้งหมดคือ:
<_sre.SRE_Match object at ...>
คำตอบ:
Match
ออบเจ็กต์เป็นจริงเสมอและNone
จะส่งคืนหากไม่มีการจับคู่ เพียงทดสอบความถูกต้อง
if re.match(...):
if re.match(...) is None:
แทน
re
ออกแบบมาแบบนี้ ถ้าอmatch
อบเจ็กต์เป็นจริงเสมอทำไมมันไม่กลับมาTrue
ตั้งแต่แรกเพราะเราจำเป็นต้องรู้เสมอว่าคำตอบนั้นเป็นจริงหรือเท็จ
หากคุณต้องการจริงๆTrue
หรือFalse
เพียงแค่ใช้bool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
ดังที่คำตอบอื่น ๆ ได้ชี้ให้เห็นหากคุณเพียงแค่ใช้เป็นเงื่อนไขสำหรับif
หรือwhile
คุณสามารถใช้มันได้โดยตรงโดยไม่ต้องห่อbool()
bool
จำเป็นต้องมีค่าเมื่อคำสั่งเงื่อนไขมีการดำเนินการทางคณิตศาสตร์แบบบูลีน เช่น: if (re.search ("a", "abc") & True):
&
เป็นค่าที่เหมาะสม operaration and
จะเป็นการดำเนินการบูลีน
(re.search("a","abc") and True)
bool
ทำให้ความตั้งใจของโปรแกรมเมอร์ชัดเจนสำหรับผู้อ่าน
Ignacio Vazquez-Abrams ถูกต้อง แต่ถ้าจะอธิบายให้ละเอียดre.match()
จะส่งกลับอย่างใดอย่างหนึ่งNone
ซึ่งประเมินเป็นFalse
หรือวัตถุที่ตรงกันซึ่งจะเป็นไปTrue
ตามที่เขากล่าวเสมอ เฉพาะในกรณีที่คุณต้องการข้อมูลเกี่ยวกับส่วนที่ตรงกับนิพจน์ทั่วไปของคุณคุณจำเป็นต้องตรวจสอบเนื้อหาของวัตถุที่ตรงกัน
วิธีหนึ่งที่ทำได้คือทดสอบกับค่าที่ส่งคืน เนื่องจากคุณได้รับ<_sre.SRE_Match object at ...>
มันหมายความว่าสิ่งนี้จะประเมินเป็นจริง เมื่อนิพจน์ทั่วไปไม่ตรงคุณจะได้รับค่าที่ส่งกลับไม่มีซึ่งประเมินว่าเป็นเท็จ
import re
if re.search("c", "abcdef"):
print "hi"
ผลิตhi
เป็นเอาต์พุต
None
เป็นค่าเริ่มต้นหากไม่มีการส่งคืนอย่างชัดเจน
คุณสามารถใช้re.match()
หรือre.search()
. Python นำเสนอการดำเนินการดั้งเดิมที่แตกต่างกันสองแบบตามนิพจน์ทั่วไป: re.match()
ตรวจสอบการจับคู่เฉพาะที่จุดเริ่มต้นของสตริงในขณะที่re.search()
ตรวจสอบการจับคู่ที่ใดก็ได้ในสตริง (นี่คือสิ่งที่ Perl ทำโดยค่าเริ่มต้น) อ้างถึงสิ่งนี้