⊗pyPmREESCh 36 of 129 menu

Ký tự thoát đặc biệt trong biểu thức chính quy Python

Giả sử chúng ta cần làm cho một ký tự đặc biệt biểu thị chính nó. Để làm điều này, cần phải thoát nó bằng dấu gạch chéo ngược. Hãy xem xét các ví dụ.

Ví dụ

Trong ví dụ sau, tác giả của biểu thức chính quy muốn mẫu tìm kiếm trông như thế này: chữ cái 'a', sau đó dấu cộng '+', sau đó chữ cái 'x'. Tuy nhiên, tác giả mã không thoát ký tự '+' và do đó mẫu tìm kiếm thực tế trông như thế này: chữ cái 'a' một hoặc nhiều lần, sau đó chữ cái 'x':

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

Kết quả thực thi mã:

'a+x ! ! !'

Ví dụ

Và bây giờ tác giả đã thoát dấu cộng bằng dấu gạch chéo ngược. Bây giờ mẫu tìm kiếm trông như chúng ta muốn: chữ cái 'a', sau đó dấu cộng '+', sau đó chữ cái 'x':

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

Kết quả thực thi mã:

'! ax aax aaax'

Ví dụ

Trong ví dụ này, mẫu trông như thế này: chữ cái 'a', sau đó dấu chấm '.', sau đó chữ cái 'x':

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

Kết quả thực thi mã:

'! abx azx'

Ví dụ

Trong ví dụ tiếp theo, tác giả quên thoát dấu chấm và tất cả các chuỗi con đều khớp với biểu thức chính quy, vì dấu chấm không được thoát biểu thị bất kỳ ký tự nào:

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

Kết quả thực thi mã:

'! ! !'

Nhận xét

Lưu ý rằng nếu bạn quên dấu gạch chéo ngược cho dấu chấm (khi nó phải biểu thị chính nó) - điều này có thể thậm chí không được chú ý:

res = re.sub('a.x', '!', 'a.x') print(res) # trả về '!', như chúng ta muốn

Trực quan thì hoạt động đúng (vì dấu chấm biểu thị bất kỳ ký tự nào, bao gồm cả dấu chấm thông thường '.'). Nhưng nếu thay đổi chuỗi mà các thay thế diễn ra - chúng ta sẽ thấy lỗi của mình:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # trả về '! ! !', trong khi mong đợi '! abx azx'

Danh sách ký tự đặc biệt và ký tự thông thường

Nếu thoát một ký tự thông thường - không có gì tồi tệ xảy ra - nó vẫn sẽ biểu thị chính nó. Ngoại lệ - chữ số, không thể thoát chúng.

Thường nảy sinh nghi ngờ, liệu một ký tự cụ thể có phải là đặc biệt hay không. Một số người đi đến mức thoát tất cả các ký tự đáng ngờ một cách liên tục. Tuy nhiên, đây là thực hành không tốt (làm lộn xộn biểu thức chính quy với các dấu gạch chéo ngược).

Là ký tự đặc biệt: $ ^ . * + ? \ / {} [] () |

Không phải là ký tự đặc biệt: @ : , ' " - _ = < > % # ~ `& !

Bài tập thực hành

Cho chuỗi:

txt = 'a.a aba aea'

Viết biểu thức chính quy tìm chuỗi 'a.a', không lấy các chuỗi khác.

Cho chuỗi:

txt = '2+3 223 2223'

Viết biểu thức chính quy tìm chuỗi '2+3', không lấy các chuỗi khác.

Cho chuỗi:

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

Viết biểu thức chính quy tìm các chuỗi '2+3', '2++3', '2+++3', không lấy các chuỗi khác (+ có thể là bất kỳ số lượng nào).

Cho chuỗi:

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

Viết biểu thức chính quy tìm các chuỗi '23', '2+3', '2++3', '2+++3', không lấy các chuỗi khác.

Cho chuỗi:

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

Viết biểu thức chính quy tìm các chuỗi '*q+', '*qq+', '*qqq+', không lấy các chuỗi khác.

Cho chuỗi:

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

Viết biểu thức chính quy tìm các chuỗi trong dấu ngoặc vuông và thay thế chúng bằng '!'.

Tiếng Việt
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ʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối