Díky za rady. Nesnažím se parsovat HTML, i když to tak příkladu mohlo vypadat. Původně jsem měl v úmyslu naučit se pracovat s regexp v Pythonu a při tom jsem narazil na tenhle zajímavý problém. O nějaké té teorii jazyků, či gramatikách toho moc nevím.
Díky za ten pyparsing. Nejspíš si přečtu nějakou tu teorii a zkusím si napsat jednoduchý minijazyk, když už jsem v tom učení :) Vlastimil S. Tomáš Drenčák wrote: > Na parsovanie zlozitejsich veci je perfektny pyparsing. Daju sa > definovat gramatiky a vo vnutri nich regexpy. Dokonca su tam uz aj > predpripravane gramatiky na parsovanie beznych veci... > > V Štvrtok, 25. február 2010 o 22:25 +0100, Petr Messner napísal(a): >> 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 >> [email protected] >> http://www.py.cz/mailman/listinfo/python > > > _______________________________________________ > Python mailing list > [email protected] > http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
