Article View: pl.comp.lang.python
Article #27899Re: Regex (?=...)
From: Szyk
Date: Thu, 10 Mar 2011 17:26
Date: Thu, 10 Mar 2011 17:26
48 lines
2616 bytes
2616 bytes
W dniu 2011-03-10 11:58, OMS Diver pisze:
> Mam Ci ja string
> "AL. ARMII LUDOWEJ 26" (oczywiście bez cudzysłowów).
>
> W momencie, kiedy taki string próbuję znaleźć za pomocą wyrażenia
> (?=\A)AL. ARMII LUDOWEJ 26
> wszystko działa, ale znalezienie powyższego przy pomocy
> (?=\A)AL. ARMII LUDOWEJ 26(?=\Z)
Działa.
> lub (?=\A)AL. ARMII LUDOWEJ 26(?=\s)
Nie działa, bo za 26 nie ma spacji.
> lub (?=\A)AL. ARMII LUDOWEJ 26(?=\n)
Nie działa bo za 26 nie ma znaku nowej lini.
> kończy się niepowodzeniem.
> Rozwiązaniem okazało się (?=$). Rozumiem, że \A i \Z to oznaczenia
> początku i końca stringu, a ^ I $ początku i końca linii
Akurat!!! ^ i $ znaczą dokładnie to samo co \A i \Z chyba że dodaje się
flage re.MULTILINE wtedy mają takie znaczenie jak tu piszesz.
>, ale skoro
> działa (?=\A) to dlaczego nie chce działać (?=\Z)
Sprawdzałem to w Python 3 i na 100% działa. Coś robisz źle. Już na oko
to śmierdzi, bo nie używasz r przed stringami z których składasz sobie
wyrażenie regularne. r - znaczy RAW - czyli string bez przetwarzania
(wstawiania i zamieniania czegokolwiek).
>>> i = []
>>> i.append(r"(?=\A)")
>>> i.append(r"AL. ARMII LUDOWEJ 26")
>>> i.append(r"(?=\Z)")
>>> lRe = re.compile(r"".join(i))
>>> if(lRe.search("AL. ARMII LUDOWEJ 26")):print("ok!");
...
ok!
>>>
Tak na przysżłość: Do testowania wyrażeń regularnych Pythona bardzo
przydaje się Eric - ma tam specjalny moduł do tego (zarówno do Python 2
jak i 3).
Technical Details
Message-ID:
<4d79099f$0$2499$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border4.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<ilaarp$1es3$1@newsread.aster.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border4.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Date: Thu, 10 Mar 2011 18:26:04 +0100 From: Szyk <szyk100@o2.pl> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.15) Gecko/20110303 Thunderbird/3.1.9 MIME-Version: 1.0 Newsgroups: pl.comp.lang.python Subject: Re: Regex (?=...) References: <ilaarp$1es3$1@newsread.aster.pl> In-Reply-To: <ilaarp$1es3$1@newsread.aster.pl> Lines: 48 Message-ID: <4d79099f$0$2499$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 83.30.207.41 X-Trace: 1299777951 unt-rea-a-02.news.neostrada.pl 2499 83.30.207.41:1567 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit