Python - Normal İfadeler
Bir düzenli ifade eşleşmesi veya desende düzenlenen özel bir sözdizimi kullanarak diğer dizeleri veya dizeleri setleri, bulmanıza yardımcı karakterlerin özel dizisidir. Düzenli ifadeler, UNIX dünyasında yaygın olarak kullanılmaktadır.
Python modülü rePython'da Perl benzeri düzenli ifadeler için tam destek sağlar. Re modülü, düzenli ifadeyi derlerken veya kullanırken bir hata oluşursa, istisna re.error'ı yükseltir.
Normal ifadeleri işlemek için kullanılacak iki önemli işlevi ele alacağız. Ama önce küçük bir şey var: Düzenli ifadede kullanıldıklarında özel bir anlamı olacak çeşitli karakterler var. Normal ifadelerle uğraşırken herhangi bir karışıklığı önlemek için, Ham Dizeleri şu şekilde kullanırız:r'expression'.
maç İşlevi
Bu fonksiyon girişimleri RE maç için deseni için dize opsiyonel bayraklar .
İşte bu işlevin sözdizimi -
re.match(pattern, string, flags=0)
İşte parametrelerin açıklaması -
Sr.No. | Parametre ve Açıklama |
---|---|
1 | pattern Bu, eşleştirilecek normal ifadedir. |
2 | string Bu, dizenin başındaki modelle eşleşecek şekilde aranacak dizedir. |
3 | flags Bitsel OR (|) kullanarak farklı bayraklar belirtebilirsiniz. Bunlar, aşağıdaki tabloda listelenen değiştiricilerdir. |
Re.match fonksiyonu döner birmatch başarıya itiraz, Nonebaşarısızlık üzerine. Kullandığımız grubu (num) veya grupları () işlevimatch eşleşen ifade elde etmek için nesne.
Sr.No. | Nesne Yöntemi ve Açıklaması Eşleştir |
---|---|
1 | group(num=0) Bu yöntem tüm eşleşmeyi (veya belirli bir alt grup numarasını) döndürür |
2 | groups() Bu yöntem, bir tuple içindeki tüm eşleşen alt grupları döndürür (hiç yoksa boş) |
Misal
#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)
else:
print "No match!!"
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
arama Fonksiyonu
Bu işlev , isteğe bağlı bayraklarla dizge içinde RE modelinin ilk oluşumunu arar .
İşte bu işlevin sözdizimi -
re.search(pattern, string, flags=0)
İşte parametrelerin açıklaması -
Sr.No. | Parametre ve Açıklama |
---|---|
1 | pattern Bu, eşleştirilecek normal ifadedir. |
2 | string Bu, dizenin herhangi bir yerindeki kalıba uyması için aranacak dizedir. |
3 | flags Bitsel OR (|) kullanarak farklı bayraklar belirtebilirsiniz. Bunlar, aşağıdaki tabloda listelenen değiştiricilerdir. |
Re.search fonksiyonu döner birmatch başarıya itiraz, nonebaşarısızlık üzerine. Kullandığımız grubu (num) veya grupları () işlevimatch eşleşen ifade elde etmek için nesne.
Sr.No. | Eşleştirme Nesne Yöntemleri ve Açıklaması |
---|---|
1 | group(num=0) Bu yöntem tüm eşleşmeyi (veya belirli bir alt grup numarasını) döndürür |
2 | groups() Bu yöntem, bir tuple içindeki tüm eşleşen alt grupları döndürür (hiç yoksa boş) |
Misal
#!/usr/bin/python
import re
line = "Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
print "searchObj.group() : ", searchObj.group()
print "searchObj.group(1) : ", searchObj.group(1)
print "searchObj.group(2) : ", searchObj.group(2)
else:
print "Nothing found!!"
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter
Aramaya Karşı Eşleştirme
Python, normal ifadelere dayalı iki farklı ilkel işlem sunar: match yalnızca dizenin başında bir eşleşme olup olmadığını kontrol ederken search dizenin herhangi bir yerinde bir eşleşme olup olmadığını denetler (Perl'in varsayılan olarak yaptığı şey budur).
Misal
#!/usr/bin/python
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print "match --> matchObj.group() : ", matchObj.group()
else:
print "No match!!"
searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
print "search --> searchObj.group() : ", searchObj.group()
else:
print "Nothing found!!"
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
No match!!
search --> searchObj.group() : dogs
Ara ve Değiştir
En önemlilerinden biri re normal ifadeler kullanan yöntemler sub.
Sözdizimi
re.sub(pattern, repl, string, max=0)
Bu yöntem, RE tüm oluşumları yerine model olarak dizge ile repl sürece tüm oluşumları ikame maksimum sağladı. Bu yöntem değiştirilmiş dizeyi döndürür.
Misal
#!/usr/bin/python
import re
phone = "2004-959-559 # This is Phone Number"
# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num
# Remove anything other than digits
num = re.sub(r'\D', "", phone)
print "Phone Num : ", num
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
Phone Num : 2004-959-559
Phone Num : 2004959559
Normal İfade Değiştiriciler: Seçenek İşaretleri
Normal ifade değişmezleri, eşleşmenin çeşitli yönlerini kontrol etmek için isteğe bağlı bir değiştirici içerebilir. Değiştiriciler, isteğe bağlı bir bayrak olarak belirtilir. Daha önce gösterildiği gibi özel OR (|) kullanarak birden çok değiştirici sağlayabilirsiniz ve bunlardan biri ile temsil edilebilir -
Sr.No. | Değiştirici ve Açıklama |
---|---|
1 | re.I Büyük / küçük harfe duyarlı olmayan eşleştirme gerçekleştirir. |
2 | re.L Kelimeleri mevcut yerel ayara göre yorumlar. Bu yorum, alfabetik grubu (\ w ve \ W) ve ayrıca kelime sınırı davranışını (\ b ve \ B) etkiler. |
3 | re.M $ Değerinin bir satırın sonuyla eşleşmesini sağlar (dizenin yalnızca sonunu değil) ve ^ herhangi bir satırın başlangıcını eşleştirir (yalnızca dizenin başlangıcı değil). |
4 | re.S Satırsonu dahil herhangi bir karakterle nokta (nokta) eşleşmesini sağlar. |
5 | re.U Unicode karakter kümesine göre harfleri yorumlar. Bu bayrak \ w, \ W, \ b, \ B davranışını etkiler. |
6 | re.X "Keskin" normal ifade sözdizimine izin verir. Beyaz boşluğu yok sayar (bir küme [] içinde veya ters eğik çizgi ile kaçıldığında hariç) ve çıkış karaktersiz # işaretini yorum işaretçisi olarak kabul eder. |
Normal İfade Kalıpları
Kontrol karakterleri dışında, (+ ? . * ^ $ ( ) [ ] { } | \), tüm karakterler kendileriyle eşleşir. Bir kontrol karakterinin önüne ters eğik çizgi koyarak kaçabilirsiniz.
Aşağıdaki tablo Python'da bulunan normal ifade sözdizimini listeler -
Sr.No. | Desen ve Açıklama |
---|---|
1 | ^ Satırın başıyla eşleşir. |
2 | $ Satırın sonuyla eşleşir. |
3 | . Yeni satır hariç herhangi bir tek karakterle eşleşir. M seçeneğini kullanmak, satırsonu ile eşleşmesine de izin verir. |
4 | [...] Parantez içindeki herhangi bir tek karakterle eşleşir. |
5 | [^...] Parantez içinde olmayan herhangi bir tek karakterle eşleşir |
6 | re* Önceki ifadenin 0 veya daha fazla oluşumuyla eşleşir. |
7 | re+ Önceki ifadenin 1 veya daha fazla oluşumuyla eşleşir. |
8 | re? Önceki ifadenin 0 veya 1 oluşumuyla eşleşir. |
9 | re{ n} Önceki ifadenin tam olarak n sayıda oluşumuyla eşleşir. |
10 | re{ n,} Önceki ifadenin n veya daha fazla oluşumuyla eşleşir. |
11 | re{ n, m} Önceki ifadenin en az n ve en çok m oluşumuyla eşleşir. |
12 | a| b A veya b ile eşleşir. |
13 | (re) Normal ifadeleri gruplandırır ve eşleşen metni hatırlar. |
14 | (?imx) Normal bir ifade içindeki i, m veya x seçeneklerini geçici olarak değiştirir. Parantez içindeyse, yalnızca o alan etkilenir. |
15 | (?-imx) Normal bir ifade içindeki i, m veya x seçeneklerini geçici olarak kapatır. Parantez içindeyse, yalnızca o alan etkilenir. |
16 | (?: re) Normal ifadeleri, eşleşen metni hatırlamadan gruplar. |
17 | (?imx: re) Parantez içindeki i, m veya x seçeneklerini geçici olarak değiştirir. |
18 | (?-imx: re) Parantez içindeki i, m veya x seçeneklerini geçici olarak kapatır. |
19 | (?#...) Yorum Yap. |
20 | (?= re) Bir model kullanarak konumu belirtir. Aralığı yok. |
21 | (?! re) Kalıp olumsuzlamasını kullanarak konumu belirtir. Aralığı yok. |
22 | (?> re) Geriye dönük izleme olmaksızın bağımsız desenle eşleşir. |
23 | \w Kelime karakterleriyle eşleşir. |
24 | \W Sözcük olmayan karakterlerle eşleşir. |
25 | \s Boşluklarla eşleşir. [\ T \ n \ r \ f] ile eşdeğerdir. |
26 | \S Beyaz olmayan boşlukla eşleşir. |
27 | \d Rakamlarla eşleşir. [0-9] ile eşdeğerdir. |
28 | \D Sayı olmayanlarla eşleşir. |
29 | \A Dizenin başıyla eşleşir. |
30 | \Z Dizenin sonuyla eşleşir. Bir satırsonu varsa, yeni satırdan hemen önce eşleşir. |
31 | \z Dizenin sonuyla eşleşir. |
32 | \G Maçlar son maçın bittiği yeri gösterir. |
33 | \b Köşeli parantezlerin dışındayken kelime sınırlarıyla eşleşir. Parantez içindeyken geri boşlukla (0x08) eşleşir. |
34 | \B Kelime olmayan sınırlarla eşleşir. |
35 | \n, \t, etc. Yeni satırlarla, satır başlarıyla, sekmelerle vb. Eşleşir. |
36 | \1...\9 N'inci gruplanmış alt ifadeyle eşleşir. |
37 | \10 Zaten eşleşiyorsa, n'inci gruplanmış alt ifadeyle eşleşir. Aksi takdirde, bir karakter kodunun sekizlik temsilini ifade eder. |
Normal İfade Örnekleri
Değişmez karakterler
Sr.No. | Örnek ve Açıklama |
---|---|
1 | python "Python" ile eşleşir. |
Karakter sınıfları
Sr.No. | Örnek ve Açıklama |
---|---|
1 | [Pp]ython "Python" veya "python" ile eşleştirin |
2 | rub[ye] "Ruby" veya "rube" ile eşleş |
3 | [aeiou] Herhangi bir küçük harfle eşleştirin |
4 | [0-9] Herhangi bir rakamı eşleştirin; [0123456789] ile aynı |
5 | [a-z] Herhangi bir küçük ASCII harfiyle eşleşir |
6 | [A-Z] Herhangi bir büyük ASCII harfiyle eşleştirin |
7 | [a-zA-Z0-9] Yukarıdakilerden herhangi biriyle eşleştirin |
8 | [^aeiou] Küçük harfli sesli haricinde herhangi bir şeyle eşleş |
9 | [^0-9] Rakam dışında herhangi bir şeyle eşleştirin |
Özel Karakter Sınıfları
Sr.No. | Örnek ve Açıklama |
---|---|
1 | . Satırsonu hariç herhangi bir karakterle eşleş |
2 | \d Bir rakamla eşleştirin: [0-9] |
3 | \D Bir basamaksız eşleştirme: [^ 0-9] |
4 | \s Bir boşluk karakteriyle eşleştirin: [\ t \ r \ n \ f] |
5 | \S Beyaz olmayan alanı eşleştir: [^ \ t \ r \ n \ f] |
6 | \w Tek bir kelime karakteriyle eşleştirin: [A-Za-z0-9_] |
7 | \W Kelime olmayan bir karakterle eşleştirin: [^ A-Za-z0-9_] |
Tekrarlama Durumları
Sr.No. | Örnek ve Açıklama |
---|---|
1 | ruby? "Ovma" veya "yakut" ile eşleştirin: y isteğe bağlıdır |
2 | ruby* "Ovmak" artı 0 veya daha fazla ys ile eşleştirin |
3 | ruby+ "Ovma" artı 1 veya daha fazla ys eşleştirin |
4 | \d{3} Tam olarak 3 rakamla eşleş |
5 | \d{3,} 3 veya daha fazla basamağı eşleştirin |
6 | \d{3,5} 3, 4 veya 5 haneyi eşleştirin |
Kararsız tekrarlama
Bu, en az sayıda tekrarla eşleşir -
Sr.No. | Örnek ve Açıklama |
---|---|
1 | <.*> Açgözlü tekrar: "<python> perl>" ile eşleşir |
2 | <.*?> Nongreedy: "<python> perl>" içindeki "<python>" ile eşleşir |
Parantezlerle Gruplama
Sr.No. | Örnek ve Açıklama |
---|---|
1 | \D\d+ Grup yok: + tekrarlar \ d |
2 | (\D\d)+ Gruplandırılmış: + tekrarlar \ D \ d çifti |
3 | ([Pp]ython(, )?)+ "Python", "Python, python, python" vb. İle eşleştirin. |
Geri referanslar
Bu, daha önce eşleşen bir grupla tekrar eşleşiyor -
Sr.No. | Örnek ve Açıklama |
---|---|
1 | ([Pp])ython&\1ails Python ve kovaları veya Python ve Pails'i eşleştirin |
2 | (['"])[^\1]*\1 Tek veya çift tırnaklı dize. \ 1, 1. grubun eşleştiği şeyle eşleşir. \ 2 eşleştiği 2. grupla eşleşir vb. |
Alternatifler
Sr.No. | Örnek ve Açıklama |
---|---|
1 | python|perl "Python" veya "perl" ile eşleş |
2 | rub(y|le)) "Yakut" veya "ruble" ile eşleş |
3 | Python(!+|\?) "Python" ve ardından bir veya daha fazla! veya bir? |
Çapalar
Bunun eşleşme konumunu belirtmesi gerekir.
Sr.No. | Örnek ve Açıklama |
---|---|
1 | ^Python Bir dizenin veya iç satırın başında "Python" ile eşleştirin |
2 | Python$ Bir dizenin veya satırın sonunda "Python" ile eşleştirin |
3 | \APython Bir dizenin başında "Python" ile eşleştirin |
4 | Python\Z Bir dizenin sonunda "Python" ile eşleşir |
5 | \bPython\b "Python" u bir kelime sınırında eşleştirin |
6 | \brub\B \ B kelime dışı sınırdır: "rube" ve "ruby" de "ovmak" ile eşleşir, ancak tek başına değil |
7 | Python(?=!) Ardından ünlem işareti varsa "Python" ile eşleşin. |
8 | Python(?!!) Ardından ünlem işareti gelmiyorsa "Python" ile eşleşin. |
Parantez İçeren Özel Sözdizimi
Sr.No. | Örnek ve Açıklama |
---|---|
1 | R(?#comment) "R" ile eşleşir. Geri kalan her şey bir yorum |
2 | R(?i)uby "Uby" ile eşleşirken büyük / küçük harfe duyarlı değil |
3 | R(?i:uby) Yukarıdaki gibi |
4 | rub(?:y|le)) Yalnızca \ 1 geri referans oluşturmadan grupla |