+ Cevap Yaz
10 sonuçtan 1 ile 10 arası gösteriliyor

Konu: Düzenli İfadeler Üzerine Bir Soru

  1. #1
    Üye aamederen Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    08/2008
    Mesaj
    52

    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.

  2. #2
    Kronik Atatürkçü Coldplay Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    06/2008
    Yer
    10. köy
    Mesaj
    1,351

    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.


  3. #3
    Üye aamederen Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    08/2008
    Mesaj
    52

    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.

  4. #4
    Kronik Atatürkçü Coldplay Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    06/2008
    Yer
    10. köy
    Mesaj
    1,351

    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.


  5. #5
    Kronik Atatürkçü Coldplay Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    06/2008
    Yer
    10. köy
    Mesaj
    1,351

    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


  6. #6
    Üye aamederen Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    08/2008
    Mesaj
    52

    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.

  7. #7
    Üye
    Üyelik Tarihi
    03/2007
    Mesaj
    2

    Merhaba Arkadaşlar,

    Uzun zaman oldu buraya yazmayalı.

    Şu an find ile search in eşanlamlı olup olmamasını sorguluyoruz.

  8. #8
    Üye mahsusfirar Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    01/2008
    Yer
    Ankara
    Mesaj
    119

    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.
    http://www.paksoybebe.com

  9. #9
    Üye
    Üyelik Tarihi
    08/2008
    Mesaj
    1

    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...

  10. #10
    Kronik Atatürkçü Coldplay Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    06/2008
    Yer
    10. köy
    Mesaj
    1,351

    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.


+ Cevap Yaz

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

     

Benzer Konular

  1. Python'da Düzenli İfadeler(RE)
    By Rahman Yazgan in forum Python / Zope
    Cevap: 1
    En Son Mesaj: 15/06/2008, 18:17
  2. Düzenli İfadeler
    By Onderce in forum PHP
    Cevap: 6
    En Son Mesaj: 20/09/2004, 09:45
  3. ADSL üzerine bir kaç soru
    By realperest in forum Ağ / Güvenlik
    Cevap: 18
    En Son Mesaj: 06/03/2004, 15:28
  4. Düzenli İfadeler
    By HunTER in forum PHP
    Cevap: 2
    En Son Mesaj: 24/02/2004, 02:53
  5. Düzenli İfadeler ile ilgili
    By Jam in forum PHP
    Cevap: 3
    En Son Mesaj: 29/11/2003, 16:54

Bookmarks

Mesaj Yazma Hakları

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