⊗pyPmREGL 38 of 129 menu

การจำกัดความโลภใน regex ใน Python

โดยค่าเริ่มต้น นิพจน์ทั่วไปนั้น โลภ ซึ่งหมายความว่าพวกมันจะจับกลุ่ม ตัวอักษรจำนวนมากที่สุดเท่าที่เป็นไปได้ มาดูตัวอย่างกัน สมมติว่าเรามี สตริงแบบนี้:

txt = 'aeeex zzz x kkk'

ในสตริงนี้เราต้องการค้นหาสตริงย่อย 'aeeex' โดยใช้รูปแบบดังนี้: ตัวอักษร 'a' ตามด้วยตัวอักษรใดๆ หนึ่งตัวหรือมากกว่า จากนั้นตัวอักษร 'x':

res = re.sub('a.+x', '!', txt) print(res)

แม้ว่าเราต้องการได้สตริง '! zzz x kkk' แต่ผลลัพธ์ที่ได้จะเป็นสตริง '! kkk' สาเหตุทั้งหมดอยู่ที่ว่า regex ของเราค้นหา ตัวอักษรทั้งหมดจากตัวอักษร 'a' ไปจนถึงตัวอักษร 'x' แต่ในสตริงของเรามีตัวอักษร 'x' สองตัว! เนื่องจากความโลภ ทำให้ regex ค้นหาไปจนถึงตัวสุดท้าย จึงจับกลุ่มได้ไม่ตรงกับสิ่งที่เราต้องการ

แน่นอนว่าบ่อยครั้งพฤติกรรมเช่นนี้คือสิ่งที่เรา ต้องการ แต่ในกรณีนี้จำเป็นต้อง ยกเลิกความโลภและบอก regex ให้ค้นหาไปจนถึงตัว x ตัวแรกเท่านั้น ใน กรณีนี้ควรใส่เครื่องหมายคำถามหลังโอเปอเรเตอร์การทำซ้ำ:

res = re.sub('a.+?x', '!', txt) print(res) # จะได้สตริง '! zzz x kkk'

สามารถจำกัดความโลภให้กับโอเปอเรเตอร์การทำซ้ำ ทั้งหมดได้: ทั้ง *, ? และ {} - แบบนี้: *?, ?? และ {}?

กำหนดสตริง:

txt = 'aba accca azzza wwwwa'

เขียน regex ที่จะค้นหา สตริงทั้งหมดที่มีตัวอักษร 'a' อยู่ที่ขอบทั้งสองด้าน และแทนที่แต่ละสตริงด้วย '!' ระหว่างตัวอักษร 'a' สามารถมี ตัวอักษรใดๆ (ยกเว้น 'a') ก็ได้

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ