Vasco píše v Čt 25. 02. 2010 v 21:38 +0100: > 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. >
http://docs.python.org/library/re.html#re-syntax *?, +?, ?? The '*', '+', and '?' qualifiers are all greedy; they match as much text as possible. Sometimes this behaviour isn’t desired; if the RE <.*> is matched against '<H1>title</H1>', it will match the entire string, and not just '<H1>'. Adding '?' after the qualifier makes it perform the match in non-greedy or minimal fashion; as few characters as possible will be matched. Using .*? in the previous expression will match only '<H1>'. > S pozdravem, > Vlastimil S. > _______________________________________________ > Python mailing list > [email protected] > http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
