ฉันจะรับตำแหน่งเริ่มต้นและตำแหน่งสิ้นสุดของการแข่งขันทั้งหมดโดยใช้re
โมดูลได้อย่างไร ตัวอย่างเช่นกำหนดรูปแบบr'[a-z]'
และสตริง'a1b2c3d4'
ฉันต้องการรับตำแหน่งที่พบแต่ละตัวอักษร ตามหลักการแล้วฉันต้องการรับข้อความของการแข่งขันกลับด้วย
ฉันจะรับตำแหน่งเริ่มต้นและตำแหน่งสิ้นสุดของการแข่งขันทั้งหมดโดยใช้re
โมดูลได้อย่างไร ตัวอย่างเช่นกำหนดรูปแบบr'[a-z]'
และสตริง'a1b2c3d4'
ฉันต้องการรับตำแหน่งที่พบแต่ละตัวอักษร ตามหลักการแล้วฉันต้องการรับข้อความของการแข่งขันกลับด้วย
คำตอบ:
import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
print(m.start(), m.group())
start()
อาจยอมรับหมายเลขกลุ่มดังนั้นหากคุณต้องการดัชนีของกลุ่มที่ n ให้ใช้start(n)
เอามาจาก
span () ส่งคืนทั้งดัชนีเริ่มต้นและสิ้นสุดในทูเพิลเดียว เนื่องจากวิธีการจับคู่จะตรวจสอบว่า RE ตรงกันที่จุดเริ่มต้นของสตริงเท่านั้น start () จะเป็นศูนย์เสมอ อย่างไรก็ตามวิธีการค้นหาของอินสแตนซ์ RegexObject จะสแกนผ่านสตริงดังนั้นการจับคู่อาจไม่เริ่มต้นที่ศูนย์ในกรณีนั้น
>>> p = re.compile('[a-z]+')
>>> print p.match('::: message')
None
>>> m = p.search('::: message') ; print m
<re.MatchObject instance at 80c9650>
>>> m.group()
'message'
>>> m.span()
(4, 11)
รวมเข้ากับ:
ใน Python 2.2 เมธอด finditer () จะพร้อมใช้งานโดยส่งคืนลำดับของอินสแตนซ์ MatchObject เป็นตัววนซ้ำ
>>> p = re.compile( ... )
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> iterator
<callable-iterator object at 0x401833ac>
>>> for match in iterator:
... print match.span()
...
(0, 2)
(22, 24)
(29, 31)
คุณควรจะทำบางอย่างตามลำดับ
for match in re.finditer(r'[a-z]', 'a1b2c3d4'):
print match.span()
re.search(r'abbit', "has abbit of carrot").span(0)
-(4, 9)
สำหรับ Python 3.x
from re import finditer
for match in finditer("pattern", "string"):
print(match.span(), match.group())
คุณจะได้รับ\n
tuples ที่แยกจากกัน (ประกอบด้วยดัชนีแรกและดัชนีสุดท้ายของการแข่งขันตามลำดับ) และการจับคู่นั้นเองสำหรับแต่ละ Hit ในสตริง
โปรดทราบว่าช่วงและกลุ่มได้รับการจัดทำดัชนีสำหรับกลุ่มการบันทึกหลายกลุ่มในนิพจน์ทั่วไป
regex_with_3_groups=r"([a-z])([0-9]+)([A-Z])"
for match in re.finditer(regex_with_3_groups, string):
for idx in range(0, 4):
print(match.span(idx), match.group(idx))
4
มาจากไหน?