Ten dovetek jsem moc nepochopil, ja bych to spis vyvratil tvrzenim, ze se snazi parsovat jazyk a^n b^n (krasnym prikladem je kontrola spravneho uzavorkovani, toto je vpodstate shodne), ktery neni regularni, ale bezkontexovy uz je, takze by se na to dal pouzit nejak LR, LL parser, ci jednoduse zasobnikovy automat ... ale k parsovani XML dokumentu jsou mnohem vhodnejsi knihovny na prochazeni XML stromu, jak uz bylo receno ... <br>
<br><div class="gmail_quote">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Petr Messner</b> <span dir="ltr">&lt;<a href="mailto:petr.messner@gmail.com">petr.messner@gmail.com</a>&gt;</span><br>
Date: 2010/2/25<br>Subject: Re: [python] Greedy regexp<br>To: Konference PyCZ &lt;<a href="mailto:python@py.cz">python@py.cz</a>&gt;<br><br><br>Ahoj,<br>
<br>
především jsi nenapsal, co se snažíš vyřešit.<br>
<br>
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.).<br>
<br>
Pokud očekáváš<br>
<div class="im"><br>
&gt; &quot;One &lt;a&gt;Two&lt;/a&gt; Three&quot;<br>
<br>
<br>
</div>pak bys prostě měl to jedno &lt;/a&gt; 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.<br>

<font color="#888888"><br>
PM<br>
</font><div><div></div><div class="h5"><br>
<br>
On 25.2.2010, at 21:38, Vasco wrote:<br>
<br>
&gt; Zdravím,<br>
&gt;<br>
&gt; zrovna se hraju v Pythonu s regexp a narazil jsem na menší zádrhel. Mám<br>
&gt; následující řetězec:<br>
&gt;<br>
&gt; &quot;&lt;a&gt;One &lt;a&gt;Two&lt;/a&gt; Three&lt;/a&gt; &lt;a&gt;Four&lt;/a&gt;&quot;<br>
&gt;<br>
&gt; A následující regexp:<br>
&gt;<br>
&gt; &quot;&lt;(?P&lt;name&gt;\w+)&gt;(?P&lt;text&gt;.*?)&lt;/(?P=name)&gt;&quot;<br>
&gt;<br>
&gt; Když to proženu přes &#39;search&#39;, dostanu pro první nalezený výraz tohle:<br>
&gt;<br>
&gt; &quot;One &lt;a&gt;Two&quot;<br>
&gt;<br>
&gt; Ale očekával bych spíše:<br>
&gt;<br>
&gt; &quot;One &lt;a&gt;Two&lt;/a&gt; Three&quot;<br>
&gt;<br>
&gt; Naopak, pokud upravím regexp na:<br>
&gt;<br>
&gt; &quot;&lt;(?P&lt;name&gt;\w+)&gt;(?P&lt;text&gt;.*)&lt;/(?P=name)&gt;&quot;<br>
&gt;<br>
&gt; Tedy vynechám otazník. Výraz .* pak bere vše, co mu přijde do cesty,<br>
&gt; takže výsledek metody &#39;search&#39; je:<br>
&gt;<br>
&gt; &quot;One &lt;a&gt;Two&lt;/a&gt; Three&lt;/a&gt; &lt;a&gt;Four&quot;<br>
&gt;<br>
&gt; Takže to také není to pravé ořechové. Rád bych to vyřešil nějak<br>
&gt; elegantně, nejlépe pomocí regexp (když už se je teda učím :) ), ale<br>
&gt; zatím jsem nenarazil na nic funkčního. Dá se podobný problém vůbec řešit<br>
&gt; čistě pomocí regularnich výrazů, nebo ne?<br>
&gt;<br>
&gt; Btw. k testování reg. výrazů používám prográmek<br>
&gt; <a href="http://kodos.sourceforge.net" target="_blank">http://kodos.sourceforge.net</a> Rozhodně můžu doporučit.<br>
&gt;<br>
&gt; S pozdravem,<br>
&gt; Vlastimil S.<br>
&gt; _______________________________________________<br>
&gt; Python mailing list<br>
&gt;<br>
<br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@py.cz">Python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
</div></div></div><br>