Melarikan Aksara Khas dalam Ungkapan Biasa Python
Katakan kita ingin aksara khas mewakili dirinya sendiri. Untuk itu, ia perlu dilarikan menggunakan slash belakang. Mari kita lihat contoh-contohnya.
Contoh
Dalam contoh berikut, pengarang ungkapan biasa ingin
pola carian kelihatan seperti ini: huruf
'a', kemudian tanda tambah '+', kemudian
huruf 'x'. Walau bagaimanapun, pengarang kod
tidak melarikan aksara '+' dan oleh itu
pola carian sebenarnya kelihatan seperti ini:
huruf 'a' satu kali atau lebih,
kemudian huruf 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a+x', '!', txt)
print(res)
Keputusan pelaksanaan kod:
'a+x ! ! !'
Contoh
Sekarang pengarang telah melarikan tanda tambah dengan
slash belakang. Sekarang pola carian kelihatan
seperti yang dikehendaki: huruf 'a', kemudian tanda tambah
'+', kemudian huruf 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a\+x', '!', txt)
print(res)
Keputusan pelaksanaan kod:
'! ax aax aaax'
Contoh
Dalam contoh ini, pola kelihatan seperti ini:
huruf 'a', kemudian titik '.',
kemudian huruf 'x':
txt = 'a.x abx azx'
res = re.sub('a\.x', '!', txt)
print(res)
Keputusan pelaksanaan kod:
'! abx azx'
Contoh
Dalam contoh seterusnya, pengarang terlupa melarikan titik dan semua substring ditangkap oleh ungkapan biasa, kerana titik yang tidak dilarikan mewakili sebarang aksara:
txt = 'a.x abx azx'
res = re.sub('a.x', '!', txt)
print(res)
Keputusan pelaksanaan kod:
'! ! !'
Catatan
Perhatikan bahawa jika anda terlupa slash belakang untuk titik (apabila ia sepatutnya mewakili dirinya sendiri) - ini mungkin sukar untuk diperhatikan:
res = re.sub('a.x', '!', 'a.x')
print(res) # mengembalikan '!', seperti yang kita mahukan
Secara visual ia berfungsi dengan betul (kerana titik
mewakili sebarang aksara, termasuk
titik biasa '.'). Tetapi jika kita menukar
talian di mana penggantian berlaku - kita akan
melihat kesilapan kita:
res = re.sub('a.x', '!', 'a.x abx azx')
print(res) # mengembalikan '! ! !', tetapi dijangkakan '! abx azx'
Senarai aksara khas dan biasa
Jika kita melarikan aksara biasa - tiada masalah akan berlaku - ia tetap akan mewakili dirinya sendiri. Pengecualian - digit, mereka tidak boleh dilarikan.
Sering timbul keraguan, sama ada aksara tertentu adalah khas. Ada yang sampai melarikan semua aksara yang mencurigakan secara berturut-turut. Walau bagaimanapun, ini adalah amalan yang tidak baik (mengacaukan ungkapan biasa dengan slash belakang).
Aksara khas: $ ^ . * + ? \ / {} [] () |
Bukan aksara khas: @ : , ' " - _ = < > % # ~ `& !
Tugas praktikal
Diberi talian:
txt = 'a.a aba aea'
Tulis ungkapan biasa yang akan mencari talian
'a.a', tanpa menangkap yang lain.
Diberi talian:
txt = '2+3 223 2223'
Tulis ungkapan biasa yang akan mencari talian
'2+3', tanpa menangkap yang lain.
Diberi talian:
txt = '23 2+3 2++3 2+++3 345 567'
Tulis ungkapan biasa yang akan mencari talian
'2+3', '2++3', '2+++3',
tanpa menangkap yang lain (+ boleh sebarang
kuantiti).
Diberi talian:
txt = '23 2+3 2++3 2+++3 445 677'
Tulis ungkapan biasa yang akan mencari talian
'23', '2+3', '2++3',
'2+++3', tanpa menangkap yang lain.
Diberi talian:
txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'
Tulis ungkapan biasa yang akan mencari talian
'*q+', '*qq+', '*qqq+',
tanpa menangkap yang lain.
Diberi talian:
txt = '[abc] {abc} abc (abc) [abc]'
Tulis ungkapan biasa yang akan mencari talian
dalam kurungan segi empat dan menggantikannya dengan
'!'.