การใช้นิพจน์ทั่วไปของ 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 ทำโดยค่าเริ่มต้น) อ้างถึงสิ่งนี้