[python] Greedy regexp

Tomas Hnizdil tomash.cz na gmail.com
Pátek Únor 26 23:45:58 CET 2010


Ten dovetek jsem moc nepochopil, ja bych to spis vyvratil tvrzenim, ze se
snazi parsovat jazyk a^n b^n (krasnym prikladem je kontrola spravneho
uzavorkovani, toto je vpodstate shodne), ktery neni regularni, ale
bezkontexovy uz je, takze by se na to dal pouzit nejak LR, LL parser, ci
jednoduse zasobnikovy automat ... ale k parsovani XML dokumentu jsou mnohem
vhodnejsi knihovny na prochazeni XML stromu, jak uz bylo receno ...

---------- Forwarded message ----------
From: Petr Messner <petr.messner na gmail.com>
Date: 2010/2/25
Subject: Re: [python] Greedy regexp
To: Konference PyCZ <python na py.cz>


Ahoj,

především jsi nenapsal, co se snažíš vyřešit.

Každopádně, XML nebo HTML se neparsuje regulárními výrazy (protože to prostě
nejsou jazyky s regulární gramatikou, IIRC), jsou na to knihovny
(BeautifulSoup, lxml atd.).

Pokud očekáváš

> "One <a>Two</a> Three"


pak bys prostě měl to jedno </a> v regulárním výraze přeskočit. Pak to ale
bude bude regulární výraz specializovaný jen na elementy s jedním
podelementem, což je důvod, proč na toto regulární výrazy nepoužívat.

PM


On 25.2.2010, at 21:38, Vasco wrote:

> Zdravím,
>
> zrovna se hraju v Pythonu s regexp a narazil jsem na menší zádrhel. Mám
> následující řetězec:
>
> "<a>One <a>Two</a> Three</a> <a>Four</a>"
>
> A následující regexp:
>
> "<(?P<name>\w+)>(?P<text>.*?)</(?P=name)>"
>
> Když to proženu přes 'search', dostanu pro první nalezený výraz tohle:
>
> "One <a>Two"
>
> Ale očekával bych spíše:
>
> "One <a>Two</a> Three"
>
> Naopak, pokud upravím regexp na:
>
> "<(?P<name>\w+)>(?P<text>.*)</(?P=name)>"
>
> Tedy vynechám otazník. Výraz .* pak bere vše, co mu přijde do cesty,
> takže výsledek metody 'search' je:
>
> "One <a>Two</a> Three</a> <a>Four"
>
> Takže to také není to pravé ořechové. Rád bych to vyřešil nějak
> elegantně, nejlépe pomocí regexp (když už se je teda učím :) ), ale
> zatím jsem nenarazil na nic funkčního. Dá se podobný problém vůbec řešit
> čistě pomocí regularnich výrazů, nebo ne?
>
> Btw. k testování reg. výrazů používám prográmek
> http://kodos.sourceforge.net Rozhodně můžu doporučit.
>
> S pozdravem,
> Vlastimil S.
> _______________________________________________
> Python mailing list
>

_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20100226/c4728f55/attachment.html>


Další informace o konferenci Python