🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #27899

Re: Regex (?=...)

#27899
From: Szyk
Date: Thu, 10 Mar 2011 17:26
48 lines
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-mail
References: <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