⊗pyPmREESCh 36 of 129 menu

การหนีอักขระพิเศษในเรกเอ็กซ์ของ Python

สมมติว่าคุณต้องการให้สัญลักษณ์พิเศษหมายถึงตัวของมันเอง ในการทำเช่นนั้น คุณควรหนีมันโดยใช้แบ็กสแลช ลองดูตัวอย่าง

ตัวอย่าง

ในตัวอย่างต่อไปนี้ ผู้เขียนเรกเอ็กซ์ต้องการให้รูปแบบการค้นหาดูเหมือนว่า: ตัวอักษร 'a' ตามด้วยเครื่องหมายบวก '+' ตามด้วยตัวอักษร 'x' อย่างไรก็ตาม ผู้เขียนโค้ด ไม่ได้หนีอักขระ '+' ดังนั้นรูปแบบการค้นหาในความเป็นจริงจึงมีลักษณะดังนี้: ตัวอักษร 'a' หนึ่งครั้งหรือมากกว่า จากนั้นตัวอักษร 'x':

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

ผลลัพธ์ของการรันโค้ด:

'a+x ! ! !'

ตัวอย่าง

และตอนนี้ผู้เขียนได้หนีเครื่องหมายบวกด้วยแบ็กสแลชแล้ว ตอนนี้รูปแบบการค้นหาดูเหมือนอย่างที่ควรแล้ว: ตัวอักษร 'a' ตามด้วยเครื่องหมายบวก '+' ตามด้วยตัวอักษร 'x':

txt = 'a+x ax aax aaax' res = re.sub('a\+x', '!', txt) print(res)

ผลลัพธ์ของการรันโค้ด:

'! ax aax aaax'

ตัวอย่าง

ในตัวอย่างนี้ รูปแบบมีลักษณะดังนี้: ตัวอักษร 'a' ตามด้วยจุด '.' ตามด้วยตัวอักษร 'x':

txt = 'a.x abx azx' res = re.sub('a\.x', '!', txt) print(res)

ผลลัพธ์ของการรันโค้ด:

'! abx azx'

ตัวอย่าง

ในตัวอย่างต่อไปนี้ ผู้เขียนลืมหนีจุด และสตริงย่อยทั้งหมดตรงกับเรกเอ็กซ์ เนื่องจากจุดที่ไม่ถูกหนีหมายถึง อักขระใดๆ:

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

ผลลัพธ์ของการรันโค้ด:

'! ! !'

หมายเหตุ

สังเกตว่าถ้าคุณลืมแบ็กสแลชสำหรับจุด (เมื่อ มันควรจะหมายถึงตัวมันเอง) - คุณอาจจะสังเกตไม่เห็น:

res = re.sub('a.x', '!', 'a.x') print(res) # คืนค่า '!' อย่างที่เราต้องการ

จากที่เห็นทำงานได้ถูกต้อง (เนื่องจากจุด หมายถึงอักขระใดๆ รวมถึง จุดธรรมดา '.' ด้วย) แต่ถ้าเปลี่ยน สตริงที่ถูกแทนที่ - เราจะเห็นข้อผิดพลาดของเรา:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # คืนค่า '! ! !' แต่คาดหวัง '! abx azx'

รายการอักขระพิเศษและอักขระธรรมดา

หากหนีอักขระธรรมดา - จะไม่มีอะไร แย่เกิดขึ้น - มันจะยังคงหมายถึงตัวของมันเอง ข้อยกเว้นคือตัวเลข ไม่สามารถหนีพวกมันได้

บ่อยครั้งที่เกิดความสงสัยว่าอักขระนี้ เป็นอักขระพิเศษหรือไม่ บางคนถึงกับ หนีอักขระที่น่าสงสัยทั้งหมด อย่างไรก็ตาม นี่เป็นวิธีปฏิบัติที่ไม่ดี (ทำให้เรกเอ็กซ์รกไปด้วยแบ็กสแลช)

เป็นอักขระพิเศษ: $ ^ . * + ? \ / {} [] () |

ไม่ใช่อักขระพิเศษ: @ : , ' " - _ = < > % # ~ `& !

โจทย์ฝึกปฏิบัติ

กำหนดสตริง:

txt = 'a.a aba aea'

เขียนเรกเอ็กซ์ที่ค้นหาสตริง 'a.a' โดยไม่จับส่วนอื่น

กำหนดสตริง:

txt = '2+3 223 2223'

เขียนเรกเอ็กซ์ที่ค้นหาสตริง '2+3' โดยไม่จับส่วนอื่น

กำหนดสตริง:

txt = '23 2+3 2++3 2+++3 345 567'

เขียนเรกเอ็กซ์ที่ค้นหาสตริง '2+3', '2++3', '2+++3' โดยไม่จับส่วนอื่น (+ อาจมีจำนวนเท่าใดก็ได้)

กำหนดสตริง:

txt = '23 2+3 2++3 2+++3 445 677'

เขียนเรกเอ็กซ์ที่ค้นหาสตริง '23', '2+3', '2++3', '2+++3' โดยไม่จับส่วนอื่น

กำหนดสตริง:

txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

เขียนเรกเอ็กซ์ที่ค้นหาสตริง '*q+', '*qq+', '*qqq+' โดยไม่จับส่วนอื่น

กำหนดสตริง:

txt = '[abc] {abc} abc (abc) [abc]'

เขียนเรกเอ็กซ์ที่ค้นหาสตริง ที่อยู่ในวงเล็บเหลี่ยมและแทนที่ด้วย '!'

ไทย
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
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ