re.match
ถูกยึดที่จุดเริ่มต้นของสตริง นั่นไม่เกี่ยวข้องกับการขึ้นบรรทัดใหม่ดังนั้นจึงไม่เหมือนกับการใช้^
ในรูปแบบ
ในฐานะที่เป็นเอกสาร re.matchพูดว่า:
หากอักขระศูนย์หรือมากกว่าที่
จุดเริ่มต้นของสตริงตรงกับรูปแบบนิพจน์ทั่วไปให้ส่งคืนMatchObject
อินสแตนซ์ที่เกี่ยวข้อง ส่งคืนNone
ถ้าสตริงไม่ตรงกับรูปแบบ; โปรดทราบว่านี่จะแตกต่างจากการแข่งขันที่มีความยาวเป็นศูนย์
หมายเหตุ: หากคุณต้องการค้นหาคู่ที่ใดก็ได้ในสตริงให้ใช้search()
แทน
re.search
ค้นหาสตริงทั้งหมดตามที่เอกสารระบุว่า :
สแกนผ่านสตริงเพื่อค้นหาตำแหน่งที่รูปแบบนิพจน์ทั่วไปสร้างการจับคู่และส่งคืนMatchObject
อินสแตนซ์ที่เกี่ยวข้อง ส่งคืนNone
ถ้าไม่มีตำแหน่งในสตริงที่ตรงกับรูปแบบ โปรดทราบว่าสิ่งนี้แตกต่างจากการค้นหาการจับคู่ที่มีความยาวเป็นศูนย์ ณ จุดหนึ่งในสตริง
match
ดังนั้นหากคุณต้องการเพื่อให้ตรงกับที่จุดเริ่มต้นของสตริงหรือเพื่อให้ตรงกับการใช้งานสตริงทั้งหมด มันเร็วกว่า search
มิฉะนั้นใช้
เอกสารมีส่วนเฉพาะสำหรับmatch
vs.search
ซึ่งครอบคลุมหลายสตริง:
Python เสนอการดำเนินการดั้งเดิมสองแบบที่แตกต่างกันตามนิพจน์ทั่วไป: match
ตรวจสอบการจับคู่
เฉพาะตอนต้นของสตริงขณะที่search
ตรวจสอบการจับคู่
ที่ใดก็ได้ในสตริง (นี่คือสิ่งที่ Perl ทำตามค่าเริ่มต้น)
โปรดทราบว่าmatch
อาจแตกต่างจากsearch
แม้เมื่อใช้นิพจน์ทั่วไปที่ขึ้นต้นด้วย'^'
: '^'
จับคู่เฉพาะที่จุดเริ่มต้นของสตริงหรือใน
MULTILINE
โหมดทันทีหลังจากขึ้นบรรทัดใหม่ การmatch
ดำเนินการ“” ประสบความสำเร็จเฉพาะในกรณีที่รูปแบบการจับคู่ที่จุดเริ่มต้นของสตริง
โดยไม่คำนึงถึงโหมดหรือที่ตำแหน่งเริ่มต้นที่กำหนดโดยpos
อาร์กิวเมนต์ตัวเลือกโดยไม่คำนึงถึงว่าขึ้นบรรทัดใหม่นำหน้ามัน
ตอนนี้พูดคุยพอ ได้เวลาดูตัวอย่างโค้ดแล้ว
# example code:
string_with_newlines = """something
someotherthing"""
import re
print re.match('some', string_with_newlines) # matches
print re.match('someother',
string_with_newlines) # won't match
print re.match('^someother', string_with_newlines,
re.MULTILINE) # also won't match
print re.search('someother',
string_with_newlines) # finds something
print re.search('^someother', string_with_newlines,
re.MULTILINE) # also finds something
m = re.compile('thing$', re.MULTILINE)
print m.match(string_with_newlines) # no match
print m.match(string_with_newlines, pos=4) # matches
print m.search(string_with_newlines,
re.MULTILINE) # also matches