Python-da Regulyar Ifadələrdə Daxili Çizgi Dəstləri

Çizgi də [ ] daxilində xüsusi simvoldur (ancaq xaricində - deyil). Əgər sizə çizgi özü kimi simvol lazımdırsa - onu qrup ayırıcısı kimi qəbul edilməyəcəyi yerdə qoyun.

Bu niyə vacibdir: siz özünüz də hiss etmədən simvol qrupu yarada bilərsiniz. Məsələn, bununla - '[:-@]' - siz düşünürsünüz ki, nöqtəli vergül, çizgi və at işarəsini seçirsiniz, amma əslində : və @ arasındakı simvol qrupu alınır. Bu qrupa aşağıdakı simvollar daxildir: ? < = > :

Onlar hardan gəldi? ASCII cədvəlindən - nöqtəli vergülün nömrəsi at işarəsindən kiçikdir - və beləliklə bir qrup alınır. Yəni bütün qruplar ASCII cədvəlinə görə alınır (istəsəniz bundan istifadə edə bilərsiniz).

Bununla necə mübarizə aparmaq: çizgi simvolunu elə yerdə qoyun ki, o, mütləq qrup simvolu kimi qəbul edilməsin, məsələn, əvvəlində və ya sonunda (yəni [-dən sonra və ya ]-dən əvvəl).

Həmçinin çizgini ekranlaşdıra bilərsiniz - onda o, mövqeyindən asılı olmayaraq özünü ifadə edəcək. Məsələn, [:-@] əvəzinə [:\-@] yazın - və artıq qrup olmayacaq, əvəzində üç simvol olacaq - nöqtəli vergül, çizgi və at işarəsi @.

Nümunə

Aşağıdakı nümunədə axtarış şablonu belədir: rəqəm 1, sonra 'a'-dan 'z'-dək hərf, sonra rəqəm 2:

pythontxt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)

print(res)

Kodun icrasının nəticəsi:

python'! 1-2 ! !'

Nümunə

Gəlin indi çizgini ekranlaşdıraq. Nəticədə axtarış şablonu belədir: rəqəm 1, sonra 'a' hərfi, və ya çizgi, və ya 'z' hərfi, sonra rəqəm 2:

pythontxt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)

print(res)

Kodun icrasının nəticəsi:

python'! ! 1c2 !'

Nümunə

Sadəcə çizgini ekranlaşdırmadan yerini dəyişmək olar:

pythontxt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)

print(res)

Kodun icrasının nəticəsi:

python'! ! 1c2 !'

Nümunə

Aşağıdakı nümunədə axtarış şablonu belədir: birinci simvol kiçik hərflər və ya çizgi '-', sonra iki 'x' hərfi:

pythontxt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)

print(res)

Kodun icrasının nəticəsi:

python'! Axx ! @xx'

Nümunə

Aşağıdakı nümunədə axtarış şablonu belədir: birinci simvol kiçik, böyük hərflər və ya çizgi '-', sonra iki 'x' hərfi:

pythontxt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)

print(res)

Kodun icrasının nəticəsi:

python'! ! ! @xx'

Nümunə

Çizgini iki qrup arasında yerləşdirmək olar - orada o, əminliklə başqa bir qrup yaratmayacaq:

pythontxt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)

print(res)

Kodun icrasının nəticəsi:

python'! ! ! @xx'

Praktiki Tapşırıqlar

Задание 1

Verilmiş sətir:

pythontxt = 'xaz xBz xcz x-z x@z'

Aşağıdakı şablona uyğun bütün sətirləri tapın: 'x' hərfi, böyük və ya kiçik hərf və ya çizgi, 'z' hərfi.

Задание 2

Verilmiş sətir:

pythontxt = 'xaz x$z x-z xcz x+z x%z x*z'

Aşağıdakı şablona uyğun bütün sətirləri tapın: 'x' hərfi, sonra və ya dollar, və ya çizgi və ya plus, sonra 'z' hərfi.