[python] Zvláštní chování regulárnich výrazů
Vasco
vasco.vls na gmail.com
Pondělí Květen 18 11:29:18 CEST 2009
Zdravím,
měl bych dotaz na zvláštní chování regulárních výrazů, které si neumím
vysvětlit.
Mám následující kód:
# -*- coding: utf-8 -*-
import re
flags = re.UNICODE | re.LOCALE | re.MULTILINE | re.DOTALL
text = u'Příšerně **žluťoučký\nkůň úpěl ďábelské\ntóny!**'
text2 = u'Příšerně **žluťoučký kůň úpěl ďábelské tóny!**'
print 'Text\t', re.sub(r'\*\*(.+?)\*\*', r'<strong>\1</strong>', text,
flags)
print 'Text2\t', re.sub(r'\*\*(.+?)\*\*', r'<strong>\1</strong>', text2,
flags)
I přes to, že jsem nastavil MULTILINE a DOTALL, se první text, který
obsahuje \n nezobrazí správně. Když ale z řetězce vymažu znaky pro nový
řádek, regulární výraz funguje.
Přitom v dokumentaci je napsáno, že pokud je nastaven DOTALL, bude '.'
brát všechny znaky, včetně \n.
Jak by tedy měl správně vypadat výše napsaný regulární výraz?
A ještě jeden dotaz. V dokumentaci se zmiňují o metodě 'compile()', díky
níž se budou výrazy provádět rychleji. Jak moc se aplikace zrychlí,
případně jak to použít?
Díky,
Vlastimil S.
Další informace o konferenci Python