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':

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

print(res)

Keputusan pelaksanaan kod:

python'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':

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

print(res)

Keputusan pelaksanaan kod:

python'! ax aax aaax'

Contoh

Dalam contoh ini, pola kelihatan seperti ini: huruf 'a', kemudian titik '.', kemudian huruf 'x':

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

print(res)

Keputusan pelaksanaan kod:

python'! 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:

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

print(res)

Keputusan pelaksanaan kod:

python'! ! !'

Catatan

Perhatikan bahawa jika anda terlupa slash belakang untuk titik (apabila ia sepatutnya mewakili dirinya sendiri) - ini mungkin sukar untuk diperhatikan:

pythonres = 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:

pythonres = 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

Задание 1

Diberi talian:

pythontxt = 'a.a aba aea'

Tulis ungkapan biasa yang akan mencari talian 'a.a', tanpa menangkap yang lain.

Задание 2

Diberi talian:

pythontxt = '2+3 223 2223'

Tulis ungkapan biasa yang akan mencari talian '2+3', tanpa menangkap yang lain.

Задание 3

Diberi talian:

pythontxt = '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).

Задание 4

Diberi talian:

pythontxt = '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.

Задание 5

Diberi talian:

pythontxt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

Tulis ungkapan biasa yang akan mencari talian '*q+', '*qq+', '*qqq+', tanpa menangkap yang lain.

Задание 6

Diberi talian:

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

Tulis ungkapan biasa yang akan mencari talian dalam kurungan segi empat dan menggantikannya dengan '!'.