<font size=2 face="sans-serif">Funguje to ked najprv skompilujes regex
s danymi flags takto</font>
<br>
<br><tt><font size=3 color=blue># -*- coding: cp1250 -*-</font></tt><tt><font size=3 color=#8100ff><br>
import</font></tt><tt><font size=3> re<br>
<br>
flags = re.UNICODE | re.LOCALE | re.MULTILINE | re.DOTALL<br>
text = u'</font></tt><tt><font size=3 color=#ff00ff>Příšerně **žluťoučký</font></tt><tt><font size=3 color=#6260a1>\n</font></tt><tt><font size=3 color=#ff00ff>kůň
úpěl ďábelské</font></tt><tt><font size=3 color=#6260a1>\n</font></tt><tt><font size=3 color=#ff00ff>tóny!**</font></tt><tt><font size=3>'<br>
text2 = u'</font></tt><tt><font size=3 color=#ff00ff>Příšerně **žluťoučký
kůň úpěl ďábelské tóny!**</font></tt><tt><font size=3>'<br>
<br>
my_regex = re.compile(r"</font></tt><tt><font size=3 color=#ff00ff>\*\*(?P<my_group>.+)\*\*</font></tt><tt><font size=3>",
flags)</font></tt>
<br><tt><font size=3 color=#813f62><b><br>
print</b></font></tt><tt><font size=3> '</font></tt><tt><font size=3 color=#ff00ff>Text:</font></tt><tt><font size=3 color=#6260a1>\t</font></tt><tt><font size=3 color=#ff00ff>%s</font></tt><tt><font size=3>' </font></tt><tt><font size=3 color=#6260a1>\</font></tt><tt><font size=3><br>
% re.sub(my_regex, r'</font></tt><tt><font size=3 color=#ff00ff><strong>\1</strong></font></tt><tt><font size=3>',
text, flags)</font></tt><tt><font size=3 color=#813f62><b><br>
print</b></font></tt><tt><font size=3> '</font></tt><tt><font size=3 color=#ff00ff>Text2:</font></tt><tt><font size=3 color=#6260a1>\t</font></tt><tt><font size=3 color=#ff00ff>%s</font></tt><tt><font size=3>' </font></tt><tt><font size=3 color=#6260a1>\</font></tt><tt><font size=3><br>
% re.sub(my_regex, r'</font></tt><tt><font size=3 color=#ff00ff><strong>\1</strong></font></tt><tt><font size=3>',
text2, flags)</font></tt>
<br>
<br>
<br><font size=2 face="sans-serif"><b><u>Vystup</u></b></font>
<br><font size=2 face="sans-serif"><br>
</font><font size=3 face="Courier New">python regexp.py</font>
<br><font size=3 face="Courier New">Text: Příšerně <strong>žluťoučký</font>
<br><font size=3 face="Courier New">kůň úpěl ďábelské</font>
<br><font size=3 face="Courier New">tóny!</strong></font>
<br><font size=3 face="Courier New">Text2: Příšerně <strong>žluťoučký
kůň úpěl ďábelské tóny!</strong></font>
<br>
<br>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td><font size=1 color=#5f5f5f face="sans-serif">From:</font>
<td><font size=1 face="sans-serif">Vasco <vasco.vls@gmail.com></font>
<tr valign=top>
<td><font size=1 color=#5f5f5f face="sans-serif">To:</font>
<td><font size=1 face="sans-serif">python@py.cz</font>
<tr valign=top>
<td><font size=1 color=#5f5f5f face="sans-serif">Date:</font>
<td><font size=1 face="sans-serif">18.05.2009 11:30</font>
<tr valign=top>
<td><font size=1 color=#5f5f5f face="sans-serif">Subject:</font>
<td><font size=1 face="sans-serif">[python] Zvláštní chování regulárnich
výrazů</font>
<tr valign=top>
<td><font size=1 color=#5f5f5f face="sans-serif">Sent by:</font>
<td><font size=1 face="sans-serif">python-bounces@py.cz</font></table>
<br>
<hr noshade>
<br>
<br>
<br><tt><font size=2>Zdravím,<br>
měl bych dotaz na zvláštní chování regulárních výrazů, které si neumím<br>
vysvětlit.<br>
<br>
Mám následující kód:<br>
<br>
# -*- coding: utf-8 -*-<br>
import re<br>
<br>
flags = re.UNICODE | re.LOCALE | re.MULTILINE | re.DOTALL<br>
text = u'Příšerně **žluťoučký\nkůň úpěl ďábelské\ntóny!**'<br>
text2 = u'Příšerně **žluťoučký kůň úpěl ďábelské tóny!**'<br>
print 'Text\t', re.sub(r'\*\*(.+?)\*\*', r'<strong>\1</strong>',
text,<br>
flags)<br>
print 'Text2\t', re.sub(r'\*\*(.+?)\*\*', r'<strong>\1</strong>',
text2,<br>
flags)<br>
<br>
I přes to, že jsem nastavil MULTILINE a DOTALL, se první text, který<br>
obsahuje \n nezobrazí správně. Když ale z řetězce vymažu znaky pro
nový<br>
řádek, regulární výraz funguje.<br>
<br>
Přitom v dokumentaci je napsáno, že pokud je nastaven DOTALL, bude '.'<br>
brát všechny znaky, včetně \n.<br>
<br>
Jak by tedy měl správně vypadat výše napsaný regulární výraz?<br>
<br>
A ještě jeden dotaz. V dokumentaci se zmiňují o metodě 'compile()',
díky<br>
níž se budou výrazy provádět rychleji. Jak moc se aplikace zrychlí,<br>
případně jak to použít?<br>
<br>
Díky,<br>
Vlastimil S.<br>
_______________________________________________<br>
Python mailing list<br>
Python@py.cz<br>
</font></tt><a href=http://www.py.cz/mailman/listinfo/python><tt><font size=2>http://www.py.cz/mailman/listinfo/python</font></tt></a><tt><font size=2><br>
</font></tt>
<br>
<br>