[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