Python’da Düzenli İfadeler (RegEx)

Bu öğreticide, düzenli ifadeler (RegEx) hakkında bilgi edinecek ve RegEx ile çalışmak için Python’un re modülünü kullanacaksınız (örneklerin yardımıyla).

Normal İfade ( RegEx ), bir arama modelini tanımlayan bir karakter dizisidir. Örneğin,

Yukarıdaki kod bir RegEx kalıbı tanımlar. Kalıp şu şekildedir: ile başlayan herhangi bir beş harfli dizeave ile bitens.

RegEx kullanılarak tanımlanan bir kalıp, bir dizeyle eşleştirmek için kullanılabilir.

İfadeSicimEşleşti mi?
^a...s$abseşleşme yok
aliasKibrit
abyssKibrit
Aliaseşleşme yok
An abacuseşleşme yok

rePython, RegEx ile çalışmak üzere adlandırılmış bir modüle sahiptir . İşte bir örnek:

Burada, re.match()arama yapmak için işlevi kullandıkmodeliçindetest_string. Arama başarılı olursa, yöntem bir eşleşme nesnesi döndürür. Değilse, döner None.


içinde tanımlanmış başka birkaç fonksiyon vardır.tekrarRegEx ile çalışmak için modül. Bunu keşfetmeden önce, düzenli ifadelerin kendilerini öğrenelim.

RegEx’in temellerini zaten biliyorsanız, Python RegEx’e atlayın .


RegEx Kullanarak Desen Belirtin

Normal ifadeleri belirtmek için meta karakterler kullanılır. Yukarıdaki örnekte ^ve $meta karakterlerdir.


Meta Karakterler

Meta karakterler, bir RegEx motoru tarafından özel bir şekilde yorumlanan karakterlerdir. İşte meta karakterlerin bir listesi:

[] {} () |


[]– Köşeli parantez

Köşeli parantezler, eşleştirmek istediğiniz bir dizi karakteri belirtir.

İfadeSicimEşleşti mi?
[abc]a1 maç
ac2 maç
Hey Judeeşleşme yok
abc de ca5 maç

Burada, [abc]eşleştirmeye çalıştığınız dize abveya öğelerinden herhangi birini içeriyorsa eşleşir c.

-Köşeli parantezler içinde bir dizi karakter de belirtebilirsiniz .

  • [a-e]ile aynıdır [abcde].
  • [1-4]ile aynıdır [1234].
  • [0-39]ile aynıdır [01239].

^Köşeli parantezin başında düzeltme işareti simgesini kullanarak karakter kümesini tamamlayabilirsiniz (ters çevirebilirsiniz) .

  • [^abc]dışında herhangi bir karakter anlamına geliraveyabveyac.
  • [^0-9]herhangi bir rakam olmayan karakter anlamına gelir.

.– Dönem

Nokta, herhangi bir tek karakterle eşleşir (yeni satır hariç '\n').

İfadeSicimEşleşti mi?
..aeşleşme yok
ac1 maç
acd1 maç
acde2 eşleşme (4 karakter içerir)

^– Şapka

Düzeltme işareti , bir dizenin belirli bir karakterle başlayıp başlamadığını^ kontrol etmek için kullanılır .

İfadeSicimEşleşti mi?
^aa1 maç
abc1 maç
baceşleşme yok
^ababc1 maç
acbEşleşme yok ( ile başlar aancak devamında gelmez b)

$– Dolar

Dolar sembolü , bir dizenin belirli bir karakterle bitip bitmediğini$ kontrol etmek için kullanılır .

İfadeSicimEşleşti mi?
a$a1 maç
formula1 maç
cabeşleşme yok

*– Yıldız

Yıldız sembolü , kendisine bırakılan desenin sıfır veya daha fazla tekrarı* ile eşleşir .

İfadeSicimEşleşti mi?
ma*nmn1 maç
man1 maç
maaan1 maç
mainEşleşme yok ( atakip etmez n)
woman1 maç

+– Artı

Artı sembolü , kendisine bırakılan desenin bir veya daha fazla tekrarı+ ile eşleşir .

İfadeSicimEşleşti mi?
ma+nmnEşleşme yok ( akarakter yok)
man1 maç
maaan1 maç
mainEşleşme yok (a’nın ardından n gelmez)
woman1 maç

?– Soru İşareti

Soru işareti sembolü , kendisine bırakılan örüntünün sıfır veya bir tekrarı? ile eşleşir .

İfadeSicimEşleşti mi?
ma?nmn1 maç
man1 maç
maaanEşleşme yok (birden fazla akarakter)
mainEşleşme yok (a’nın ardından n gelmez)
woman1 maç

{}– Diş telleri

Bu kodu göz önünde bulundurun: {n,m}. Bu, en azındann, ve en fazlamkendisine bırakılan desenin tekrarları.

İfadeSicimEşleşti mi?
a{2,3}abc dateşleşme yok
abc daat1 maç ( ‘de )daat
aabc daaat2 maç ( aabcve )daaat
aabc daaaat2 maç ( aabcve )daaaat

Bir örnek daha deneyelim. Bu RegEx [0-9]{2, 4}, en az 2 basamakla eşleşir, ancak 4 basamaktan fazla olamaz

İfadeSicimEşleşti mi?
[0-9]{2,4}ab123csde1 maç (eşleşme )ab123csde
12 and 3456733 maç ( 12, 3456, 73)
1 and 2eşleşme yok

|– Değişim

Dikey çubuk |, dönüşüm ( oroperatör) için kullanılır.

İfadeSicimEşleşti mi?
a|bcdeeşleşme yok
ade1 maç (eşleşme ade)
acdbea3 maç ( ‘de )acdbea

Burada, a|bherhangi birini içeren herhangi bir dizeyi eşleştirinaveyab


()– Grup

Parantezler ()alt kalıpları gruplamak için kullanılır. Örneğin, (a|b|c)xzikisinden biriyle eşleşen herhangi bir dizeyi eşleştirinaveyabveyacbunu takibenxz

İfadeSicimEşleşti mi?
(a|b|c)xzab xzeşleşme yok
abxz1 maç (eşleşme )abxz
axz cabxz2 maç ( ‘de )axzbc cabxz

\– Ters eğik çizgi

Boşluk \, tüm meta karakterler de dahil olmak üzere çeşitli karakterlerden kaçmak için kullanılır. Örneğin,

\$abir dize $ve ardından a. Burada, $bir RegEx motoru tarafından özel bir şekilde yorumlanmaz.

Bir karakterin özel bir anlamı olup olmadığından emin değilseniz, \önüne koyabilirsiniz. Bu, karakterin özel bir şekilde ele alınmamasını sağlar.


Özel Diziler

Özel diziler, yaygın olarak kullanılan kalıpların yazılmasını kolaylaştırır. İşte özel dizilerin bir listesi:

\A– Belirtilen karakterler bir dizenin başındaysa eşleşir.

İfadeSicimEşleşti mi?
\Athethe sunKibrit
In the suneşleşme yok

\b– Belirtilen karakterler bir kelimenin başında veya sonundaysa eşleşir.

İfadeSicimEşleşti mi?
\bfoofootballKibrit
a footballKibrit
afootballeşleşme yok
foo\bthe fooKibrit
the afoo testKibrit
the afootesteşleşme yok

\B– karşısında \b. Belirtilen karakterler bir kelimenin başında veya sonunda değilse eşleşir.

İfadeSicimEşleşti mi?
\Bfoofootballeşleşme yok
a footballeşleşme yok
afootballKibrit
foo\Bthe fooeşleşme yok
the afoo testeşleşme yok
the afootestKibrit

\d– Herhangi bir ondalık basamakla eşleşir. Eşittir[0-9]

İfadeSicimEşleşti mi?
\d12abc33 maç ( ‘de )12abc3
Pythoneşleşme yok

\D– Ondalık olmayan herhangi bir rakamla eşleşir. Eşittir[^0-9]

İfadeSicimEşleşti mi?
\D1ab34"503 maç ( ‘de )1ab34"50
1345eşleşme yok

\s– Bir dizenin herhangi bir boşluk karakteri içerdiği durumlarda eşleşir. ile eşdeğerdir [ \t\n\r\f\v].

İfadeSicimEşleşti mi?
\sPython RegEx1 maç
PythonRegExeşleşme yok

\S– Bir dizenin boşluk olmayan herhangi bir karakter içerdiği durumlarda eşleşir. ile eşdeğerdir [^ \t\n\r\f\v].

İfadeSicimEşleşti mi?
\Sa b2 maç ( ‘de ) a b
   eşleşme yok

\w– Herhangi bir alfasayısal karakterle (rakamlar ve alfabeler) eşleşir. ile eşdeğerdir [a-zA-Z0-9_]. Bu arada, alt çizgi _de alfasayısal bir karakter olarak kabul edilir.

İfadeSicimEşleşti mi?
\w12&": ;c3 maç ( ‘de )12&": ;c
%"> !eşleşme yok

\W– Herhangi bir alfasayısal olmayan karakterle eşleşir. Eşittir[^a-zA-Z0-9_]

İfadeSicimEşleşti mi?
\W1a2%c1 maç ( ‘de )1a2%c
Pythoneşleşme yok

\Z– Belirtilen karakterler bir dizenin sonundaysa eşleşir.

İfadeSicimEşleşti mi?
Python\ZI like Python1 maç
I like Python Programmingeşleşme yok
Python is fun.eşleşme yok

İpucu: Normal ifadeler oluşturmak ve test etmek için regex101 gibi RegEx test araçlarını kullanabilirsiniz . Bu araç yalnızca düzenli ifadeler oluşturmanıza yardımcı olmakla kalmaz, aynı zamanda onu öğrenmenize de yardımcı olur.

Artık RegEx’in temellerini anladığınıza göre, Python kodunuzda RegEx’i nasıl kullanacağınızı tartışalım.


Python Normal İfade

rePython’un düzenli ifadelerle çalışmak üzere adlandırılmış bir modülü vardır . Kullanmak için modülü içe aktarmamız gerekiyor.

Modül, RegEx ile çalışmak için çeşitli işlevler ve sabitler tanımlar.


yeniden bul()

Yöntem re.findall(), tüm eşleşmeleri içeren bir dize listesi döndürür.


Örnek 1: re.findall()

Desen bulunamazsa re.findall()boş bir liste döndürür.


yeniden.split()

Yöntem re.split, eşleşme olan dizeyi böler ve bölmelerin gerçekleştiği dizelerin bir listesini döndürür.


Örnek 2: yeniden.split()

Kalıp bulunamazsa, re.split()orijinal dizeyi içeren bir liste döndürür.


Yönteme maxsplitargüman iletebilirsiniz . re.split()Gerçekleşecek maksimum bölünme sayısıdır.

Bu arada, varsayılan değeri maxsplit0’dır; tüm olası bölünmeler anlamına gelir.


yeniden.sub()

Sözdizimi re.sub()şudur:

Yöntem, eşleşen oluşumların içeriğiyle değiştirildiği bir dize döndürür.yer değiştirmekdeğişken.


Örnek 3: re.sub()

Desen bulunamazsa, re.sub()orijinal dizeyi döndürür.


Geçebilirsinsaymakre.sub()yönteme dördüncü parametre olarak . Atlanırsa, 0 ile sonuçlanır. Bu, tüm oluşumların yerini alacaktır.


yeniden.subn()

Yeni dizeyi ve yapılan değişiklik sayısını içeren 2 öğelik bir demet döndürmesi dışında şuna re.subn()benzer .re.sub()


Örnek 4: re.subn()


Araştırma()

Yöntem re.search()iki argüman alır: bir model ve bir dize. Yöntem, RegEx modelinin dizeyle eşleşme ürettiği ilk konumu arar.

Arama başarılı olursa, re.search()bir eşleşme nesnesi döndürür; değilse geri döner None.


Örnek 5: yeniden arama()

Burada,kibritbir eşleşme nesnesi içerir.


Nesneyi eşleştir

dir() işlevini kullanarak bir eşleşme nesnesinin yöntemlerini ve özniteliklerini alabilirsiniz .

Eşleştirme nesnelerinin yaygın olarak kullanılan yöntem ve özelliklerinden bazıları şunlardır:


maç.grup()

Yöntem group(), dizenin eşleşmenin olduğu bölümünü döndürür.

Örnek 6: Nesneyi eşleştir

Burada,kibritdeğişken bir eşleşme nesnesi içerir.

Modelimizin (\d{3}) (\d{2})iki alt grubu vardır (\d{3})ve (\d{2}). Bu parantezli alt grupların dizesinin bir kısmını alabilirsiniz. İşte nasıl:


match.start(), match.end() ve match.span()

İşlev start(), eşleşen alt dizenin başlangıcının dizinini döndürür. Benzer şekilde, end()eşleşen alt dizenin bitiş dizinini döndürür.

İşlev span(), eşleşen parçanın başlangıç ​​ve bitiş indeksini içeren bir demet döndürür.


match.re ve match.string

Eşleşen bir nesnenin reözniteliği, bir normal ifade nesnesi döndürür. Benzer şekilde, stringöznitelik iletilen dizeyi döndürür.


Modülde tanımlanan yaygın olarak kullanılan tüm yöntemleri ele aldık re. Daha fazlasını öğrenmek istiyorsanız Python 3 re modülünü ziyaret edin .


RegEx’ten önce r önekini kullanma

Ne zamanrveyaRönek normal bir ifadeden önce kullanılır, ham dize anlamına gelir. Örneğin, '\n'yeni bir satırdır, oysa r'\n'iki karakter anlamına gelir: bir ters eğik çizgi \ve ardından n.

Boşluk \, tüm meta karakterler de dahil olmak üzere çeşitli karakterlerden kaçmak için kullanılır. Ancak, kullanarakrönek, \tedaviyi normal bir karakter olarak yapar.


Örnek 7: r öneki kullanan ham dize

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.