21 Ocak 2013 Pazartesi
Düzenli İfadeler - 5
$ (Dolar)
Bir Önceki derste gördüğümüz ^(şapka) metakarakterinin ilk özelliğinin ters işlevine sahiptir.
Yani ^(şapka), karakter arama işlemini karakter topluluğunun başında yapıyordu, $(dolar)'da ise
aranacak karakter topluluğunun sonunda arama yapıyor.
Örnek verelim:
1.Örnek
>>> import re
>>> y=['deneme','söyleme','kaleme','makine','toplantı','kaşıntı','mırıntı']
>>> for i in y:
if re.search('me$',i):
print i
deneme
söyleme
kaleme
2.Örnek
>>> for i in y:
if re.search('e$',i):
print i
deneme
söyleme
kaleme
makine
3.Örnek
>>> for i in y:
if re.search('tı$',i):
print i
toplantı
kaşıntı
mırıntı
import re ile re kütüphanemizi eklemiş olduk.
1.örnekte sonu "me" ile biten kelimeleri buldurduk.
2.örnekte is sonu "e" ile biten kelimeleri buldurduk.
3.örnekte ise sonu "tı" ile biten kelimeleri buldurduk.
\ (Ters Bölme İşareti)
Bu metakarakter bildiğimiz kaçış dizisi ifadesidir.Bunu burada kullanmamızın sebebi ise özel karakterin
çıktısını alabilmek için.Örneğin az önceki konu olan $(dolar) işaretini el alalım.
>>>for i in liste:
if re.match('[0-9]+$',i):
print i
şeklinde bir kod yazarsek ekrana herhangi bir çıktı vermeyecek.Çünkü bizim sayı ile biten karakter dizisini
aradığımızı zannedecek, fakat bizim amacımız $(Dolar) fiyatlarını bulmak olduğu için yukarıdaki kodu
şöyle değiştiriyoruz:
>>> for i in liste:
if re.match('[0-9]+\$',i):
print i
10$
35$
Görüldüğü gibi istediğimiz sonuca ulaştık.
|(Dik Çizgi)
Bu metakarakterimizde birden falza düzenli ifadeyi eşleştirmemizde işimize yarıyor.Örneğin "de" ile başlayan ve "me" ile biten karakter dizilerini arayalım;
>>>y=['deneme','söyleme','kaleme','makine','toplantı','kaşıntı','mırıntı']
>>> for i in y:
if re.search('^de|me$',i):
print i
deneme
söyleme
kaleme
yada "ka" ile başlayan veya "ı" ile biten karakter dizilerini arayalım;
>>> for i in y:
if re.search('^ka|ı$',i):
print i
kaleme
toplantı
kaşıntı
mırıntı
ve son olarak bir örnek daha yaparak bu dersi sonlandıralım.
>>> import re
>>> import urllib
>>> url='http://www.pythondili.blogspot.com'
>>> f=urllib.urlopen(url) //Bu kodu yazdıktan sonra biraz beklemeniz lazım çünkü programın siteye ulaşması biraz zaman(10sn) alıyor.
>>> for i in f:
nesne=re.search('.+',i)
if nesne:
print nesne.group()
Çıktı olarak "Python İle İp Bulma" yazımda verdiğim linki buldu: Kaynak
Bu son örneğimizde pythondili.blogspot.com içindeki yazıların içinde verilen linkleri aratmaktayız.
Bu kodun url='http://www.pythondili.blogspot.com' kısmını url='http://pythondili.blogspot.com/2013/01/duzenli-ifadeler-4.html' olarak değiştirdiğimizde sadece o yazı içerisinde link var mı yok mu kontrol eder.
20 Ocak 2013 Pazar
Düzenli İfadeler - 4
{} (küme parantezi)
Bu metakarakter sayesinde, istediğimiz bir karakteri istediğimiz kadar yineletmemizi sağlıyor.
>>>import re
>>> liste=['st','sat','saat,','zaaat',]
>>>for i in liste:
if re.match("sa{2}t",i):
print i
saat
ilk örneğimizde 2 a harfi olan saat kelimesini buldurduk.
>>> for i in liste:
if re.match("za{3}t",i):
print i
zaaat
bu örneğimizdede 3 a harfi olan zaat kelimesini bulduk
Bu metakarakterimizin diğer bir özelliğide {0,2} şeklinde yazarak en az ve en çok ne kadar
tekrar etmesini belirtebiliriz
>>> for i in liste:
if re.match("sa{0,2}t",i):
print i
st
sat
saat
aynı sonucu şu kodlarlada alabiliriz;
>>> for i in liste:
if re.match("sa*t",i):
print i
st
sat
saat
sonuç aynı fakat burada herhangi bir sınır olmadığı için saaaaaat kelimesini listeye eklediğimizde
bu kelimeyide çıktı verecektir.Bir önceki dersten hatırlayalım.
^ (Şapka)
Bu metakarakterimizin 2 özelliği var.Bunlar ilki bir karakter dizisini en başındaki verileri sorgulamak:
>>> x=['VC10DD','FF33GG','WW44EE','QQ11QQ']
>>> for i in x:
ara=re.search("^[A-Z]+[0-9]",i)
if ara:
print ara.group()
VC1
FF3
WW4
QQ1
İkincisi ise " hariç " anlamında kullanımı:
>>>x.appen('4fbPY91')
>>> for i in x:
ara=re.match("[0-9A-Z][^a-z]+",i)
if ara:
print ara.group()
VC10DD
FF33GG
WW44EE
QQ11QQ
gördüğünüz gibi burada sonrada eklediğimiz "4fbPY91" elemanını çıktıda vermedi.Çünkü biz match
metoduyla aranacak kriterleri şöyle belirledik:
[0-9A-Z]=aranacak değerin en başında bir sayı veya büyük harf olmalı şartı
[^a-z]=belirlediğimiz sayı veya büyük har şartından sonra ^(şapka) metakarakterimizin ikinci özelliği
olan haric tutma özelliği ile küçük harf olmaması şartını sağlıyor.
+ =Bu karakterimizde ise yukarıdaki küçük harf olayının tekrar etmesi şartını sağlıyor yani
sayı veya büyük harften sonra ne kadar küçük harf gelirse gelsin yinede bu karakter topluluğunu almayacak.
Bu ^(şapka) metakarakterimizin dahil etmeme özelliğini şöylede kullanabiliriz:
>>> for i in x:
ara=re.search("[0-9A-Z][^a-z]+",i)
if ara:
print ara.group()
VC10DD
FF33GG
WW44EE
QQ11QQ
PY91
Görüldüğü gibi burada "4fbPY91" elemanımızın başında sayı olmasına rağmen sonraki karakterler küçük harf
olduğu için ilk üç karakteri çıkararak sonr 4 karakteri bize verdi
11 Eylül 2012 Salı
Düzenli İfadeler-3
+(Artı)
Bu karakterimiz * karakteriyle benzerdir.Fakat * karakteriyle kendisinden önceki 0 veya daha fazla
sayıda tekrar eden karakterleri buluyor.+ işareti ise kendisinden önce 1 veya daha fazla olan
karakterleri bulamamızı sağlıyor.
Örnek:
>>> liste=["batman", "catwoman", "zorman", "man"]
>>> for i in liste:
if re.match(".+man",i):
print i
batman
catwoman
zorman
Görüğümüz gibi burada "man" kelimesinin çıktısını vermedi.Bunun neden ".+man" yazmış olmamızdır.
Ama * karakteriyle kullanılan sonuçta ise;
>>> for i in liste:
if re.match(".*man",i):
print i
batman
catwoman
zorman
man
"man" kelimesini ekrana verdi.
Şimdi bu +(Artı) karakterimizle ilgili biraz örnekler verelim:
*(Yıldız) Karakteriyle
>>> liste=["dv","dev","deev","deeeev","deveeeee"]
>>> for i in liste:
if re.match("de*v",i):
print i
dv
dev
deev
deeeev
deveeeee
+(Artı) Karakteriyle
>>> for i in liste:
if re.match("de+v",i):
print i
dev
deev
deeeev
deveeeee
?(Soru İşareti)
Bu karakterimiz *(Yıldız) ve +(Artı) işaretinin birleşimi şeklinde belirtebiliriz.
Hemen örnekleyelim:
*(Yıldız) Karakteriyle
>>> liste=["dv","dev","deev","deeeev","deveeeee"]
>>> for i in liste:
if re.match("de*v",i):
print i
dv
dev
deev
deeeev
deveeeee
+(Artı) Karakteriyle
>>> for i in liste:
if re.match("de+v",i):
print i
dev
deev
deeeev
deveeeee
?(Soru İşareti) Karakteriyle
>>> for i in liste:
if re.match("de?v",i):
print i
dv
dev
deveeeee
Gördüğümüz gibi ?(Soru İşareti) Karakteri d ile v arasındaki e karakterinden hiç geçmeyen kelimeleri ve 1 defa geçen kelimeleri buldu.
Bu karakterimiz * karakteriyle benzerdir.Fakat * karakteriyle kendisinden önceki 0 veya daha fazla
sayıda tekrar eden karakterleri buluyor.+ işareti ise kendisinden önce 1 veya daha fazla olan
karakterleri bulamamızı sağlıyor.
Örnek:
>>> liste=["batman", "catwoman", "zorman", "man"]
>>> for i in liste:
if re.match(".+man",i):
print i
batman
catwoman
zorman
Görüğümüz gibi burada "man" kelimesinin çıktısını vermedi.Bunun neden ".+man" yazmış olmamızdır.
Ama * karakteriyle kullanılan sonuçta ise;
>>> for i in liste:
if re.match(".*man",i):
print i
batman
catwoman
zorman
man
"man" kelimesini ekrana verdi.
Şimdi bu +(Artı) karakterimizle ilgili biraz örnekler verelim:
*(Yıldız) Karakteriyle
>>> liste=["dv","dev","deev","deeeev","deveeeee"]
>>> for i in liste:
if re.match("de*v",i):
print i
dv
dev
deev
deeeev
deveeeee
+(Artı) Karakteriyle
>>> for i in liste:
if re.match("de+v",i):
print i
dev
deev
deeeev
deveeeee
?(Soru İşareti)
Bu karakterimiz *(Yıldız) ve +(Artı) işaretinin birleşimi şeklinde belirtebiliriz.
Hemen örnekleyelim:
*(Yıldız) Karakteriyle
>>> liste=["dv","dev","deev","deeeev","deveeeee"]
>>> for i in liste:
if re.match("de*v",i):
print i
dv
dev
deev
deeeev
deveeeee
+(Artı) Karakteriyle
>>> for i in liste:
if re.match("de+v",i):
print i
dev
deev
deeeev
deveeeee
?(Soru İşareti) Karakteriyle
>>> for i in liste:
if re.match("de?v",i):
print i
dv
dev
deveeeee
Gördüğümüz gibi ?(Soru İşareti) Karakteri d ile v arasındaki e karakterinden hiç geçmeyen kelimeleri ve 1 defa geçen kelimeleri buldu.
Pythonla IP adresimizi öğrenelim
# -*- coding: utf-8 -*-
import urllib2
import socket
url="http://droidpark.com/whatismyip/"
hostname=socket.gethostname()
lanip=socket.gethostbyname(socket.gethostname())
try:
adresiAl=urllib2.urlopen(url)
wanip=adresiAl.read()
adresiAl.close()
except IOError:
print "Şuanda ip adresiniz alamıyoruz";
wanip="Error!";
print "*"*10;
print "Makine adi : %s" % hostname
print "WAN IP Adresi : %s" % wanip
print "LAN IP Adresi : %s" % lanip
print "*"*10
Kaynak
import urllib2
import socket
url="http://droidpark.com/whatismyip/"
hostname=socket.gethostname()
lanip=socket.gethostbyname(socket.gethostname())
try:
adresiAl=urllib2.urlopen(url)
wanip=adresiAl.read()
adresiAl.close()
except IOError:
print "Şuanda ip adresiniz alamıyoruz";
wanip="Error!";
print "*"*10;
print "Makine adi : %s" % hostname
print "WAN IP Adresi : %s" % wanip
print "LAN IP Adresi : %s" % lanip
print "*"*10
Kaynak
19 Şubat 2012 Pazar
Düzenli İfadeler -2-
Metakarakterler
Bu başlık altında python'da metakarakter olarak adlandırılan [] . * + ? {} ^ $ | () \
bu karakterleri göreceğiz.Giriş olarak kısa bir örnek yapalım
>>> import re
>>> liste=["turgay","turgut","özkan","özcan","özhan","kemal","dündar"]
>>> for i in liste:
nesne=re.search("öz[chk]an",i)
if nesne:
print (nesne.group())
özkan
özcan
özhan
şeklinde bir örnek ile [] işareti ile belli bir harf aralıklarını içeren isimleri bulduk.Şimdi
bun karakterlerini işleyelim.
[] Köşeli Parantez
Giriş kısmındada bağsettiğimiz gibi belli bir karakteri yada belli bir aralığı araştırır.
Şimdi önceki yazımda anlattığım match metoduyla bir örnek yapalım...
>>> import re
>>> x=["1php","2python","perl","java","3jquery","4css","c/c++"]
>>> for y in x:
if re.match("[0-9]",y):
print (y)
1php
2python
3jquery
4css
yaptığımız örnek,sayı ile başlayan karakter dizilerini match metoduyla bulmak.
Eğer istersek if re.match("[0-9]",y): ifadesini if re.match("[A-Z]",y): şeklinde değiştirerek
har ile başlayan karakter dizilerini ekrana yazdırabiliriz.Ama tabi bu büyük hat aramsı yapacağı için
bizim örneğimizde çalışacak şekli if re.match("[a-z]",y): şeklindedir.
. Nokta
Bu metakarakteri yeni satır karakteri dışındaki karakterlerin yerini tutar.
>>>liste=['sema', 'sena', 'sefa', 'semra', 'sene']
>>> for i in liste:
if re.match("se.a",i):
print(i)
sema
sena
sefa
yukarıdaki örnek bir dizi oluşturup,dizi için de "se" ile başlayıp "a" ile biteni veya devam edeni
bulmasını istedik.Burada .nokta m,n,f karakterlerinin yerini tutarak işlemi gerçekleştirdi.
Eğer şöyle bir örnek yaparsanız
>>> liste=["ahmet","mehmet","samet",]
>>> for i in liste:
if re.match(".met",i):
print(i)
şeklindeki örnek hiç bir çıktı vermeyecek.Çünkü ilk örnektede olduğu gibi bu metakarakter tek
karakterin yerini tutar.
* Yıldız
Bu metakarakter, kendisinden önce gelen bir ifade kalıbını 0 veya daha fazla karakterde eşleştirir.
Yani .nokta karakterinin çoğulu gibi düşünebiliriz.
>>> liste=["at","sat","saat","kat","tat","strafor"]
>>> liste.append("strafor")
>>> for i in liste:
if re.match("sa*t",i):
print (i)
sat
saat
strafor
Bu örnekte yaptığımızı açıklamak gerekirse,s ile başlayan karakter dizilerini bulmak diyebiliriz.
Burada s ile başlayıp a ile devam eden karakter dizilerini buldu.Ama strafor ne alaka diyebilirsiniz.
Tanımda da dediğimiz gibi 0 veya daha fazla eşleştirme yapar.
Bu başlık altında python'da metakarakter olarak adlandırılan [] . * + ? {} ^ $ | () \
bu karakterleri göreceğiz.Giriş olarak kısa bir örnek yapalım
>>> import re
>>> liste=["turgay","turgut","özkan","özcan","özhan","kemal","dündar"]
>>> for i in liste:
nesne=re.search("öz[chk]an",i)
if nesne:
print (nesne.group())
özkan
özcan
özhan
şeklinde bir örnek ile [] işareti ile belli bir harf aralıklarını içeren isimleri bulduk.Şimdi
bun karakterlerini işleyelim.
[] Köşeli Parantez
Giriş kısmındada bağsettiğimiz gibi belli bir karakteri yada belli bir aralığı araştırır.
Şimdi önceki yazımda anlattığım match metoduyla bir örnek yapalım...
>>> import re
>>> x=["1php","2python","perl","java","3jquery","4css","c/c++"]
>>> for y in x:
if re.match("[0-9]",y):
print (y)
1php
2python
3jquery
4css
yaptığımız örnek,sayı ile başlayan karakter dizilerini match metoduyla bulmak.
Eğer istersek if re.match("[0-9]",y): ifadesini if re.match("[A-Z]",y): şeklinde değiştirerek
har ile başlayan karakter dizilerini ekrana yazdırabiliriz.Ama tabi bu büyük hat aramsı yapacağı için
bizim örneğimizde çalışacak şekli if re.match("[a-z]",y): şeklindedir.
. Nokta
Bu metakarakteri yeni satır karakteri dışındaki karakterlerin yerini tutar.
>>>liste=['sema', 'sena', 'sefa', 'semra', 'sene']
>>> for i in liste:
if re.match("se.a",i):
print(i)
sema
sena
sefa
yukarıdaki örnek bir dizi oluşturup,dizi için de "se" ile başlayıp "a" ile biteni veya devam edeni
bulmasını istedik.Burada .nokta m,n,f karakterlerinin yerini tutarak işlemi gerçekleştirdi.
Eğer şöyle bir örnek yaparsanız
>>> liste=["ahmet","mehmet","samet",]
>>> for i in liste:
if re.match(".met",i):
print(i)
şeklindeki örnek hiç bir çıktı vermeyecek.Çünkü ilk örnektede olduğu gibi bu metakarakter tek
karakterin yerini tutar.
* Yıldız
Bu metakarakter, kendisinden önce gelen bir ifade kalıbını 0 veya daha fazla karakterde eşleştirir.
Yani .nokta karakterinin çoğulu gibi düşünebiliriz.
>>> liste=["at","sat","saat","kat","tat","strafor"]
>>> liste.append("strafor")
>>> for i in liste:
if re.match("sa*t",i):
print (i)
sat
saat
strafor
Bu örnekte yaptığımızı açıklamak gerekirse,s ile başlayan karakter dizilerini bulmak diyebiliriz.
Burada s ile başlayıp a ile devam eden karakter dizilerini buldu.Ama strafor ne alaka diyebilirsiniz.
Tanımda da dediğimiz gibi 0 veya daha fazla eşleştirme yapar.
16 Şubat 2012 Perşembe
Düzenli İfadeler / Regular Experessions
Evet yeni bir konuya geçiş yapıyoruz.
Düzenli ifadeler her programlama dilinde oluduğu gibi pythonda da karşımıza çıkıyor.
Ama söylemeliyim ki python'nun belkide en karmaşık konusu.Ama elimden geldiğince basite indirgeyip
anlatmaya çalışacağım.Bu kadar konuşmadan sonra başlayalım...
Başlangıç olarak re modülünü programa çağırmamız gerekiyor ki daha öncede yaptığımız gibi
>>>import re
Bunun arkasından dir(re) komutu ile kullanacağımız metodları ekrana yazdırabiliriz.
Gördüğünüz gibi biraz fazla.Tabiki hepsini anlatmayacağım ama bu anlatmayacaklarımın işinize
yaramayacağı anlamına gelmez.
Match() Metodu
Bu metod daha önce işlediğimiz split() ve startswith() metodlarıyla aynı işlevdedir.
Görevi ise bir karakter dizisi içinde bir kelime aramamızı sağlar fakat aradığımız kelime karakter
dizisinin başında olması gerekir.
>>> x="python dilini öğreniyorum"
>>> re.match("python",x)
<_sre.SRE_Match object at 0x0000000002D7C5E0>
Gördüğümüz gibi burada python kelimesi karakter dizimiz içinde var fakat python'nun bize döndürdüğü
mesaj pekde anlaşılır değil ama aradığımız kelimenin karakter dizisinin içinde varolduğunu söylüyor
Ama şunu yazarsak
>>> re.match("dilini",x)
herhangi bir çıktı ekrana gelmeyecektir.Aslında gelecektir fakat bunu görmek için kodun başına sadece
print ifadesini eklemek yeterli olacaktır.Peki karakter dizimizde "dilini" kelimesi var neden mesaj
vermedi derseniz match metdounun açıklama kısmının son cümlesine bakmanızı tavsiye ederim.
Split ve startswith ile aynı işlevde demiştik
>>> a.split()[0]=="python"
True
>>> a.split()[0]=="dilini"
False
>>> a.startswith("python")
True
>>> a.startswith("dilini")
False
Eğer amaç karakter dizisi başında bulunan bir kelimeyi bulmaksa Split ve startswith metodları kullanılmalıdır.
Çünkü Split ve startswith, match metodundan daha hızlıdırlar.
>>> y="abcdefg"
>>> re.match("abc")
<_sre.SRE_Match object at 0x0000000002E8C5E0>
>>> re.match("abcdef",y)
<_sre.SRE_Match object at 0x0000000002E8C648>
print (re.match("abcg",y))
none
Ama sitersek arattığımızda ne bulunduğunu da görebiliriz
>>> re.match("abcg",y)
>>> a="django,pythonnun çatısıdır"
>>> b=re.match("django",a)
>>> b.group()
'django'
Evet hemen bir programa yazalım
import re
x=input("Bir kelime giriniz: ")
y=re.match("python",x)
if y:
print ("Kelimeniz (",y.group(),")ile başlıyor")
else:
print ("Kelimeniz python ile başlamıyor")
bu programı yazıp masaüstünüze kaydedip deneyin ve siz de daha farklı programlar yazmayı deneyin ki
bu dersler dersler bir işe yarasın :)
Search() Metodu
Bu metod ile de karakter dizimizin tamammında arama yapabiliriz
>>>a="python dilinde en karışık konu düzenli ifadeler."
>>>re.search("ifadeler",a)
<_sre.SRE_Match object at 0x0000000002E2C648>
Bu kodla ilgili bir program yazarsak
import re
x=input("Bir cümle giriniz: ")
y=re.search("http://www.",x)
if y:
print("cümlenizde internet adresi bulundu")
else:
print("cümlenizde herhengi bir internet adresi yok")
Findall() Metodu
Bu metod ise yine search metodunun yaptığı işi yapar,ayrıca kelimenin karakter dizisi içinde
kaç tane olduğunu biz gösterir.
>>> import re
>>> z="Python'un son derece kolay okunabilir olması düşünülmüştür. Bu yüzden örneğin küme parantezleri yerine girintileme işlemi kullanılır. Hatta bazı durumlarda girintileme işlemine dahi gerek kalmadan kodun ilgili bölümü tek satırda yazılabilir. Böylece Python, program kodunuzu en az çaba ile ve hızlıca yazmanıza imkân tanır. Sade sözdizimi ile diğer programlama dillerinden üstündür."
>>> re.findall("python",z)
['Python', 'Python']
>>> c="Python programalama diline başlayalı çok olmadıki,pythonu sevmeye başladım"
>>> re.findall("python",c)
['python']
Yukarıda 2 tane örnek verdim.Fakat bunların ikisindede 2 tane python yazısı olamsına rağmen
birincisinde 2 tane python yazısı bul ikincisinde ise 1 tane.Bunun nedeni ise findall aranınlan
kelimeye tam olarak uyanı arar ve büyük küçük harf farkı bunu etkiler.
Düzenli ifadeler her programlama dilinde oluduğu gibi pythonda da karşımıza çıkıyor.
Ama söylemeliyim ki python'nun belkide en karmaşık konusu.Ama elimden geldiğince basite indirgeyip
anlatmaya çalışacağım.Bu kadar konuşmadan sonra başlayalım...
Başlangıç olarak re modülünü programa çağırmamız gerekiyor ki daha öncede yaptığımız gibi
>>>import re
Bunun arkasından dir(re) komutu ile kullanacağımız metodları ekrana yazdırabiliriz.
Gördüğünüz gibi biraz fazla.Tabiki hepsini anlatmayacağım ama bu anlatmayacaklarımın işinize
yaramayacağı anlamına gelmez.
Match() Metodu
Bu metod daha önce işlediğimiz split() ve startswith() metodlarıyla aynı işlevdedir.
Görevi ise bir karakter dizisi içinde bir kelime aramamızı sağlar fakat aradığımız kelime karakter
dizisinin başında olması gerekir.
>>> x="python dilini öğreniyorum"
>>> re.match("python",x)
<_sre.SRE_Match object at 0x0000000002D7C5E0>
Gördüğümüz gibi burada python kelimesi karakter dizimiz içinde var fakat python'nun bize döndürdüğü
mesaj pekde anlaşılır değil ama aradığımız kelimenin karakter dizisinin içinde varolduğunu söylüyor
Ama şunu yazarsak
>>> re.match("dilini",x)
herhangi bir çıktı ekrana gelmeyecektir.Aslında gelecektir fakat bunu görmek için kodun başına sadece
print ifadesini eklemek yeterli olacaktır.Peki karakter dizimizde "dilini" kelimesi var neden mesaj
vermedi derseniz match metdounun açıklama kısmının son cümlesine bakmanızı tavsiye ederim.
Split ve startswith ile aynı işlevde demiştik
>>> a.split()[0]=="python"
True
>>> a.split()[0]=="dilini"
False
>>> a.startswith("python")
True
>>> a.startswith("dilini")
False
Eğer amaç karakter dizisi başında bulunan bir kelimeyi bulmaksa Split ve startswith metodları kullanılmalıdır.
Çünkü Split ve startswith, match metodundan daha hızlıdırlar.
>>> y="abcdefg"
>>> re.match("abc")
<_sre.SRE_Match object at 0x0000000002E8C5E0>
>>> re.match("abcdef",y)
<_sre.SRE_Match object at 0x0000000002E8C648>
print (re.match("abcg",y))
none
Ama sitersek arattığımızda ne bulunduğunu da görebiliriz
>>> re.match("abcg",y)
>>> a="django,pythonnun çatısıdır"
>>> b=re.match("django",a)
>>> b.group()
'django'
Evet hemen bir programa yazalım
import re
x=input("Bir kelime giriniz: ")
y=re.match("python",x)
if y:
print ("Kelimeniz (",y.group(),")ile başlıyor")
else:
print ("Kelimeniz python ile başlamıyor")
bu programı yazıp masaüstünüze kaydedip deneyin ve siz de daha farklı programlar yazmayı deneyin ki
bu dersler dersler bir işe yarasın :)
Search() Metodu
Bu metod ile de karakter dizimizin tamammında arama yapabiliriz
>>>a="python dilinde en karışık konu düzenli ifadeler."
>>>re.search("ifadeler",a)
<_sre.SRE_Match object at 0x0000000002E2C648>
Bu kodla ilgili bir program yazarsak
import re
x=input("Bir cümle giriniz: ")
y=re.search("http://www.",x)
if y:
print("cümlenizde internet adresi bulundu")
else:
print("cümlenizde herhengi bir internet adresi yok")
Findall() Metodu
Bu metod ise yine search metodunun yaptığı işi yapar,ayrıca kelimenin karakter dizisi içinde
kaç tane olduğunu biz gösterir.
>>> import re
>>> z="Python'un son derece kolay okunabilir olması düşünülmüştür. Bu yüzden örneğin küme parantezleri yerine girintileme işlemi kullanılır. Hatta bazı durumlarda girintileme işlemine dahi gerek kalmadan kodun ilgili bölümü tek satırda yazılabilir. Böylece Python, program kodunuzu en az çaba ile ve hızlıca yazmanıza imkân tanır. Sade sözdizimi ile diğer programlama dillerinden üstündür."
>>> re.findall("python",z)
['Python', 'Python']
>>> c="Python programalama diline başlayalı çok olmadıki,pythonu sevmeye başladım"
>>> re.findall("python",c)
['python']
Yukarıda 2 tane örnek verdim.Fakat bunların ikisindede 2 tane python yazısı olamsına rağmen
birincisinde 2 tane python yazısı bul ikincisinde ise 1 tane.Bunun nedeni ise findall aranınlan
kelimeye tam olarak uyanı arar ve büyük küçük harf farkı bunu etkiler.
Etiketler:
findall,
match,
search,
split,
startswith
Yer:
Bartın, Türkiye
3 Şubat 2012 Cuma
Karakter Dizi Metodları-4
Partition metodu
Bu metod ile bir karakter dizisini belli bir ölçüte göre ayırabiliriz.
>>> a="bartın"
>>> a.partition("rt")
('ba', 'rt', 'ın')
>>> a.partition("b")
('', 'b', 'artın')
Eğer aratacağımız karakter, bizim karakter dizimiz içinde yok ise
>>> a.partition("P")
('bartın', '', '')
RPartition metodu
Partition metodu ile aynı görevde olup tek farkı Partition metodu soldan sağa RPartition metodu
ise sağdan sola doğru okuma yapar.
>>> a.rpartition("n")
('bartı', 'n', '')
Strip Metodu
Bu metod ise karakter dizimizin başında ve sonunda yer alan boşluk ve yeni satır gibi karakterleri
kaldırır.
>>> b=" Yönetim Bilişim Sistemleri "
>>> b.strip()
'Yönetim Bilişim Sistemleri'
RStrip Metodu
Bu metod ise strip metodunun sağdece sonuna yani sağındaki boşluk ve yeni satır karakterleri kaldırır.
>>> b.rstrip()
' Yönetim Bilişim Sistemleri'
LStrip Metodu
Bu metodda karakter dizimizin başında yani solundaki boşluk ve yeni satır karakterleri kaldırır.
>>> b.lstrip()
'Yönetim Bilişim Sistemleri '
Splitlines Metodu
Bu metod ile karakter dizimizde yeni satır noktalarından itibaren keserek, bunları bir liste
haline çevirebilmemizi sağlıyor.
>>> c="Yönetim\nBilişim\nSistemleri"
>>> c.splitlines()
['Yönetim', 'Bilişim', 'Sistemleri']
Split Metodu
Bu metod join() metoduna benzemektedir.join() metoduyla bir listenin öğelerini karakter dizisi
şekline çeviriyorduk.Split() ie bu işlemin tam tersini yapıyor.
>>> f="Python programlama dili"
>>> f.split()
['Python', 'programlama', 'dili']
Bu şekilde ayırabildiği gibi
>>> f.split(",")
['Python programlama dili']
şeklindede birleştirebilir.
Diğer bir özelliği ise bir karakter dizisini kaç kez kesme işleminin uygulanmasını belirlememiz
>>> site="wwww.pythondili.blogspot.com"
>>> site.split(".",2)
['wwww', 'pythondili', 'blogspot.com']
görüldüğü gibi karakter dizimizdeki . alanlarından 2 tanesinde ayırma işlemi yaptı.Eğer
site.split(".",3) yapsaydık
>>> site.split(".",3)
['wwww', 'pythondili', 'blogspot', 'com']
eğer ayıracağımız karakter, bizim karakter dizimizde yok ise
>>> site.split(",",3)
['wwww.pythondili.blogspot.com']
ayırma işlemi yapmayacaktır.
Bu metod ile bir karakter dizisini belli bir ölçüte göre ayırabiliriz.
>>> a="bartın"
>>> a.partition("rt")
('ba', 'rt', 'ın')
>>> a.partition("b")
('', 'b', 'artın')
Eğer aratacağımız karakter, bizim karakter dizimiz içinde yok ise
>>> a.partition("P")
('bartın', '', '')
RPartition metodu
Partition metodu ile aynı görevde olup tek farkı Partition metodu soldan sağa RPartition metodu
ise sağdan sola doğru okuma yapar.
>>> a.rpartition("n")
('bartı', 'n', '')
Strip Metodu
Bu metod ise karakter dizimizin başında ve sonunda yer alan boşluk ve yeni satır gibi karakterleri
kaldırır.
>>> b=" Yönetim Bilişim Sistemleri "
>>> b.strip()
'Yönetim Bilişim Sistemleri'
RStrip Metodu
Bu metod ise strip metodunun sağdece sonuna yani sağındaki boşluk ve yeni satır karakterleri kaldırır.
>>> b.rstrip()
' Yönetim Bilişim Sistemleri'
LStrip Metodu
Bu metodda karakter dizimizin başında yani solundaki boşluk ve yeni satır karakterleri kaldırır.
>>> b.lstrip()
'Yönetim Bilişim Sistemleri '
Splitlines Metodu
Bu metod ile karakter dizimizde yeni satır noktalarından itibaren keserek, bunları bir liste
haline çevirebilmemizi sağlıyor.
>>> c="Yönetim\nBilişim\nSistemleri"
>>> c.splitlines()
['Yönetim', 'Bilişim', 'Sistemleri']
Split Metodu
Bu metod join() metoduna benzemektedir.join() metoduyla bir listenin öğelerini karakter dizisi
şekline çeviriyorduk.Split() ie bu işlemin tam tersini yapıyor.
>>> f="Python programlama dili"
>>> f.split()
['Python', 'programlama', 'dili']
Bu şekilde ayırabildiği gibi
>>> f.split(",")
['Python programlama dili']
şeklindede birleştirebilir.
Diğer bir özelliği ise bir karakter dizisini kaç kez kesme işleminin uygulanmasını belirlememiz
>>> site="wwww.pythondili.blogspot.com"
>>> site.split(".",2)
['wwww', 'pythondili', 'blogspot.com']
görüldüğü gibi karakter dizimizdeki . alanlarından 2 tanesinde ayırma işlemi yaptı.Eğer
site.split(".",3) yapsaydık
>>> site.split(".",3)
['wwww', 'pythondili', 'blogspot', 'com']
eğer ayıracağımız karakter, bizim karakter dizimizde yok ise
>>> site.split(",",3)
['wwww.pythondili.blogspot.com']
ayırma işlemi yapmayacaktır.
Etiketler:
partition,
split,
splitlines,
strip
Yer:
Bartın, Türkiye
Kaydol:
Kayıtlar (Atom)