🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
3 messages
3 total messages Started by OMS Diver Thu, 10 Mar 2011 10:58
Regex (?=...)
#27898
Author: OMS Diver
Date: Thu, 10 Mar 2011 10:58
20 lines
1631 bytes
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) lub (?=\A)AL. ARMII LUDOWEJ 26(?=\s) lub (?=\A)AL. ARMII LUDOWEJ 26(?=\n) 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, ale skoro działa (?=\A) to dlaczego nie chce działać (?=\Z)

----------
self.findString.append("(?=\A)")
self.findString.append(self.fldGeo["address"])
self.findString.append("(?=\Z)")
self.find = re.compile("".join(self.findString))
if (self.find.search(self.fld["address_tkey"])):

Z góry dzięki za pomoc

OMS
Re: Regex (?=...)
#27899
Author: 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).
Re: Regex (?=...)
#27900
Author: OMS Diver
Date: Fri, 11 Mar 2011 23:30
14 lines
1670 bytes
> 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!");
> 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).

Dzieki za podpowiedź. Sprawdzę czy r coś zmieni.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads