[python] Greedy regexp

Petr Messner petr.messner na gmail.com
Čtvrtek Únor 25 22:25:46 CET 2010


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
> 



Další informace o konferenci Python