วิธีการ finditer ของโมดูล re
วิธีการ finditer ของโมดูล re
จะคืนค่าอิเทอเรเตอร์ของการจับคู่ทั้งหมดกับ นิพจน์ปกติ
ในสตริง ในพารามิเตอร์แรกของเมธอดเราระบุ
นิพจน์ปกติ ในพารามิเตอร์ที่สองเรากำหนด
สตริงที่เราต้องการค้นหานิพจน์ปกติ ในพารามิเตอร์ที่สาม
ซึ่งเป็นตัวเลือกสามารถกำหนด แฟล็ก ได้
เมธอดจะตรวจสอบการจับคู่ทั้งหมด โดยค้นหา
จากซ้ายไปขวา
ไวยากรณ์
import re
re.finditer(นิพจน์ปกติ, สตริง, [แฟล็ก])
ตัวอย่าง
ลองหาสตริงย่อยทั้งหมดที่มีตัวเลขใน สตริงของเรา:
txt = 'aaaa 123 bbbb 456'
res = re.finditer('\d+', txt)
print(res)
ผลลัพธ์จากการรันโค้ด:
<callable_iterator object at 0x000002AA891300A0>
ตัวอย่าง
ตอนนี้ลองประกาศตัวแปร res
ซึ่งมีค่าเป็นออบเจกต์ที่เราได้
มาในตัวอย่างก่อนหน้านี้ จากนั้นวนลูปผ่าน
มัน:
txt = 'aaaa 123 bbbb 456'
res = re.finditer('\d+', txt)
for el in res:
print(el)
หลังจากรันโค้ด เราจะได้ออบเจกต์ Match object สองตัว:
<re.Match object; span=(5, 8), match='123'>
<re.Match object; span=(14, 17), match='456'>
ออบเจกต์เหล่านี้มีข้อมูลเกี่ยวกับ การจับคู่ทั้งหมดกับนิพจน์ปกติในรูปแบบทูเปิล เราสามารถแสดงการจับคู่จาก พวกมันโดยใช้ดัชนี:
for el in res:
print(el[0])
ผลลัพธ์จากการรันโค้ด:
'123'
'456'
ตัวอย่าง
เพื่อให้เห็นภาพชัดเจนขึ้น ลองใช้ กรุ๊ป (capture groups) ในการค้นหา การจับคู่ และ ขณะที่วนลูปผ่านออบเจกต์ ให้แสดงการจับคู่แรก (ซึ่งจะถูกนับเป็นกรุ๊ปที่ศูนย์) รวมถึงสมาชิกของมัน ซึ่งกระจายอยู่ใน กรุ๊ปเช่นกัน:
txt = 'aaaa 123 bbbb 456'
res = re.finditer('(\d)(\d)', txt)
for el in res:
print(el[0], el[1], el[2])
หลังจากรันโค้ด เราจะได้กรุ๊ปที่ศูนย์ ซึ่งก็คือสตริงย่อยทั้งหมด และยังได้อักขระตัวแรก และตัวที่สองจากสตริงย่อยนี้:
'12' '1' '2'
'45' '4' '5'
ดูเพิ่มเติม
-
วิธีการ
findallของโมดูลre,
ซึ่งจะคืนค่า รายการของการจับคู่ทั้งหมดในสตริง -
วิธีการ
searchของโมดูลre,
ซึ่งค้นหาการจับคู่ แรกกับนิพจน์ปกติในสตริง -
วิธีการ
matchของโมดูลre,
ซึ่งค้นหา การจับคู่กับนิพจน์ปกติที่จุดเริ่มต้นของสตริง -
วิธีการ
fullmatchของโมดูลre,
ซึ่งค้นหาการจับคู่ ทั้งหมดกับนิพจน์ปกติในสตริง -
ออบเจกต์
Match objectของโมดูลre,
ซึ่งมี ข้อมูลเกี่ยวกับการจับคู่กับนิพจน์ปกติ -
วิธีการ
splitของโมดูลre,
ซึ่งแยก สตริงออกเป็นรายการตามตัวแบ่งที่กำหนด