Ceviz Forum

Geri Dön   Ceviz Forum > Programlama > Python / Zope

Cevapla
 
LinkBack Seçenekler
Eski 10/08/2008, 15:22   #1 (permalink)
Üye
 
Üyelik Tarihi: 08/2008
Mesaj: 18
Varsayılan Düzenli İfadeler Üzerine Bir Soru

>>> import re
>>> a = "Pardus guzel linux gerisi kotu linux"
>>> b = re.search("pardus.*linux", a)
>>> b.group()
'Pardus guzel linux gerisi kotu linux'

Sorun şu: Ben bu yazı içinden "Pardus guzel linux" yazısını nasıl seçerim. Yani Pardus, Pardus'tan sonraki ilk "linux" kelimesi ve bunun arasındaki diğer karakterleri eşlemek için ne yapmam gerekir?

Herhangi bir program üzerine çalışmıyorum fakat daha önce bunun gibi bir sorun karşıma 2-3 kez çıkmıştı.

Eğer basit düşünürsek b'ye küçük bir nokta ile sorun çözülür.
Yani

>>> b = re.search("pardus.*linux", a)

yerine

>>> b = re.search("pardus.*linux.", a)

yazarsak sorun çözülür. Fakat bu benim işime yaramaz. Eğer ilk kelimeyi seçmenin güzel bir yolu varsa bilmek isterim.

Teşekkürler.
aamederen hatta değil   Alıntı Yaparak Yanıtla
Eski 10/08/2008, 16:05   #2 (permalink)
The Shawshank Redemption
 
Coldplay Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 06/2008
Yer: Sufi's deepest dreams...
Mesaj: 864
Varsayılan

Sorun yeterince acik degil benim kanimca. Düzeli ifadeler diye ba$lik atmi$sin ama ben anlattigindan düzenli ifade degil de string icinde string aradigin anlamini cikardim. Yani amacin sub-string denilen stringin bir parcasini bulmak dogru mu? Eger böyleyse düzenli ifadeler yerine slice yada string slicing diye bakman lazim internette.
__________________
Operating System : Ubuntu 8.10 Intrepid Ibex
Desktop : GNOME
Programming Language : Java
Development Tool : Eclipse
Using Eclipse for : Java, C, C++, Python, PHP
Coldplay hatta değil   Alıntı Yaparak Yanıtla
Eski 10/08/2008, 16:18   #3 (permalink)
Üye
 
Üyelik Tarihi: 08/2008
Mesaj: 18
Varsayılan

Python'da iki desen ve bunların arasındaki belirsiz sayıdaki karakteri aramak istediğinizde(yukarıdaki gibi bir ifadeyle) İlk deseni baştan, son deseni ise sondan aramaya başlıyor. Soruya farklı bir boyut getirmesi açısından bir html kodu vereyim.

Kod:
metin = <html dir="ltr" lang="tr"><head><!-- BEGIN TEMPLATE: headinclude -->
Yukarıdaki gibi bir html kodunda ben aşağıdaki gibi bir arama yaparsam, programın bana vereceği cevap yukarıdaki ifadenin aynısı olur.

Kod:
re.search("<.*>", metin)
Çünkü metin değişkenindeki ilk karakter "<", ve son karakter ">", benim arama sonucuma tamamen uyuyor olsa da benim istediğim sonucu vermez. Benim istediğim sonuç ise ilk "<" karakterini gördüğü yerden ilk ">" karakterini gördüğü yere kadar olan metin parçası.

Açıkçası umudum başlığa gelen cevapların birinden benim istediğim ifadeyi sağlayacak küçük bir meta karakteri çıkmasıydı ama çıkacak gibi değil galiba. Uzun süredir arıyorum ama bir sonuç bulamadım henüz.
aamederen hatta değil   Alıntı Yaparak Yanıtla
Eski 10/08/2008, 16:50   #4 (permalink)
The Shawshank Redemption
 
Coldplay Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 06/2008
Yer: Sufi's deepest dreams...
Mesaj: 864
Varsayılan

Ne yapmaya cali$tigini anladim. I$in komik tarafi yukaridaki örneklerini denedigimde ilk parduslu örnegin icin search'den None sonucu aliyorum. HTML'li örnekte de <_sre.SRE_Match object at 0x009B70C8> sonucu geliyor ??? Halbuki sen ayni stringin geri geldigini söylüyordun.
__________________
Operating System : Ubuntu 8.10 Intrepid Ibex
Desktop : GNOME
Programming Language : Java
Development Tool : Eclipse
Using Eclipse for : Java, C, C++, Python, PHP
Coldplay hatta değil   Alıntı Yaparak Yanıtla
Eski 10/08/2008, 19:33   #5 (permalink)
The Shawshank Redemption
 
Coldplay Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 06/2008
Yer: Sufi's deepest dreams...
Mesaj: 864
Varsayılan

Bunun tabi ki bir yolu var. "Pardus güzel linux gerisi kötü linux" yerine "Ubuntu güzel linux gerisi kötü linux" yazarsan calisir.

Düzenli ifadeler cok karma$ik bir konudur. Elinde yemegin malzemeleri vardir ama onlari nasil kari$tirip yemek yapacagin sana kalmi$tir. Zorlugu da bundan kaynaklaniyor. Diyelim sana yarim kilo pirinc ve yarim kilo tuz verdiler. Pirincin hepsini ve birkac cay ka$igi tuz kullanirsan yemek yapabilirsin. Ama yarim kilo tuzu tencereye attin mi ona yemek denmez. Düzenli ifadeler de böyledir, dogru yerde dogru sayida malzemeyi dogru $ekilde birle$tirmek gerekir.

Biraz denemeyle aradigin cözümü buldum:

Bunun icin öncelikle desen icinde .* yerine .*? kullanman gerekli. Onun di$inda search degil findall fonksiyonu asil aradigin sonucu verir. A$agida IDLE'dan kopyala yapi§tir yapiyorum. Ayrica snapshot olarak cektigim resmi de ekliyorum.

PHP Kodu:
IDLE 1.2.2      
>>> import re
>>> metin "Ubuntu guzel linux gerisi kotu linux"
>>> re.findall("Ubuntu.*?linux",metin)
[
'Ubuntu guzel linux']
>>> 
Eklenmiş Grafikler
File Type: bmp regularExpPy.bmp (616.0 KB, 9 views)
__________________
Operating System : Ubuntu 8.10 Intrepid Ibex
Desktop : GNOME
Programming Language : Java
Development Tool : Eclipse
Using Eclipse for : Java, C, C++, Python, PHP
Coldplay hatta değil   Alıntı Yaparak Yanıtla
Eski 10/08/2008, 21:10   #6 (permalink)
Üye
 
Üyelik Tarihi: 08/2008
Mesaj: 18
Varsayılan

Sağolun ColdPlay hocam, tam aradığım gibi bir çözüm oldu. Olay .* yerine .*? kullanmakmış. Bu arada düzenli ifadeleri ifade etme yönteminiz de gayet yerinde.

Teşekkür ederim.
aamederen hatta değil   Alıntı Yaparak Yanıtla
Eski 10/08/2008, 21:30   #7 (permalink)
Üye
 
Üyelik Tarihi: 03/2007
Mesaj: 8
Varsayılan

Merhaba Arkadaşlar,

Uzun zaman oldu buraya yazmayalı.

Şu an find ile search in eşanlamlı olup olmamasını sorguluyoruz.
kızılsungur hatta değil   Alıntı Yaparak Yanıtla
Eski 10/08/2008, 21:44   #8 (permalink)
Üye
 
mahsusfirar Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 01/2008
Yer: Ankara
Mesaj: 116
Varsayılan

sadece kelime anlamı olarak söyleyebilirim

search = arama ,araştırmak,yoklamak anlamlarına geliyor..

find = bulmak,buluş,bulgu anlamına gelmekte..

umarı yardımcı olur
__________________
Bilgi büyük adamı alçak gönüllü yapar, normal adamı şaşırtır, küçük adamı ise kibirlendirir.
mahsusfirar hatta değil   Alıntı Yaparak Yanıtla
Eski 11/08/2008, 02:08   #9 (permalink)
Üye
 
Üyelik Tarihi: 08/2008
Mesaj: 1
Varsayılan

Dostum öncelikle sorunun çok kolay bi cevabı var yanlış anlamadıysam eğer;

>>> import re
>>> a = "Pardus guzel linux gerisi kotu linux"
....
şeklinde yazmışsın, öncelikle burada Pardus güzel linux cümlesini almanın bir çok yolu var ama en karmaşık olan değer atayıp a değişkeni içinde aratmak. En kolay yolu da aşağıdaki kodu yazmak;

>>> import re
>>> a = "Pardus guzel linux gerisi kotu linux"
>>> print a[:19]

işleminin en kolay yolu bu, direk değişken içinden alır... Yardımcı olabildiysem ne mutlu...
http://egitimvakti.com
adresine beklerim... Bilgilerini Paylaşmak için...
musty666 hatta değil   Alıntı Yaparak Yanıtla
Eski 11/08/2008, 15:19   #10 (permalink)
The Shawshank Redemption
 
Coldplay Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 06/2008
Yer: Sufi's deepest dreams...
Mesaj: 864
Varsayılan

Alıntı:
musty666, mesajından alıntı: Mesajı Gör
Dostum öncelikle sorunun çok kolay bi cevabı var yanlış anlamadıysam eğer;

>>> import re
>>> a = "Pardus guzel linux gerisi kotu linux"
....
şeklinde yazmışsın, öncelikle burada Pardus güzel linux cümlesini almanın bir çok yolu var ama en karmaşık olan değer atayıp a değişkeni içinde aratmak. En kolay yolu da aşağıdaki kodu yazmak;

>>> import re
>>> a = "Pardus guzel linux gerisi kotu linux"
>>> print a[:19]

işleminin en kolay yolu bu, direk değişken içinden alır... Yardımcı olabildiysem ne mutlu...
http://egitimvakti.com
adresine beklerim... Bilgilerini Paylaşmak için...
Malesef yanli$ anlami$sin. Arkada$ bu stringi örnek olarak vermi$ burada, istedigi ilk 19 harfi ekrana yazdirmak degil. Mesele kullanicinin girdigi bir string'de belli kaliplara uyan bölümler aramak. Yani icabinda ekrana vermesi gereken harf sayisinin 19 oldugunu bilmeden de bu parcayi bulabilmesi gerek.
__________________
Operating System : Ubuntu 8.10 Intrepid Ibex
Desktop : GNOME
Programming Language : Java
Development Tool : Eclipse
Using Eclipse for : Java, C, C++, Python, PHP
Coldplay hatta değil   Alıntı Yaparak Yanıtla
Cevapla

Bookmarks

Seçenekler

Mesaj Yazma Hakları
Yeni mesajgöndermezsiniz
Cevap yazamazsınız
Dosya ekleyemezsiniz
Mesajınızı düzenleyemezsiniz

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Benzer Konular
Konu Konuyu açana göre Forum Cevap En Son Mesaj
Python'da Düzenli İfadeler(RE) Muallim-i Âli Python / Zope 1 15/06/2008 19:17
Düzenli İfadeler Onderce PHP 6 20/09/2004 10:45
ADSL üzerine bir kaç soru realperest Ağ / Güvenlik 18 06/03/2004 15:28
Düzenli İfadeler HunTER PHP 2 24/02/2004 02:53
Düzenli İfadeler ile ilgili Jam PHP 3 29/11/2003 16:54


Forum saati Türkiye saatine göredir. GMT +3. Şu anda saat 02:47.

Reklamlar & Desteklenenler
Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv |


Forum Yazılımı: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2001 - 2008, Ceviz.net