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:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Kodun icrasının nəticəsi:
'! 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:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Kodun icrasının nəticəsi:
'! ! 1c2 !'
Nümunə
Sadəcə çizgini ekranlaşdırmadan yerini dəyişmək olar:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Kodun icrasının nəticəsi:
'! ! 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:
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Kodun icrasının nəticəsi:
'! 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:
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Kodun icrasının nəticəsi:
'! ! ! @xx'
Nümunə
Çizgini iki qrup arasında yerləşdirmək olar - orada o, əminliklə başqa bir qrup yaratmayacaq:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Kodun icrasının nəticəsi:
'! ! ! @xx'
Praktiki Tapşırıqlar
Verilmiş sətir:
txt = '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.
Verilmiş sətir:
txt = '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.