[python] Greedy regexp
Vasco
vasco.vls na gmail.com
Čtvrtek Únor 25 21:38:24 CET 2010
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.
Další informace o konferenci Python