?P<my_group> tam samozrejme nemusi byt, takze takto # -*- coding: cp1250 -*- 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!**' my_regex = re.compile(r"\*\*(.+)\*\*", flags) print 'Text:\t%s' \ % re.sub(my_regex, r'<strong>\1</strong>', text, flags) print 'Text2:\t%s' \ % re.sub(my_regex, r'<strong>\1</strong>', text2, flags) Text: Příšerně <strong>žluťoučký kůň úpěl ďábelské tóny!</strong> Text2: Příšerně <strong>žluťoučký kůň úpěl ďábelské tóny!</strong> From: [email protected] To: Konference PyCZ <[email protected]> Date: 18.05.2009 12:31 Subject: Re: [python] Zvláštní chování regulárnich výrazů Sent by: [email protected] Funguje to ked najprv skompilujes regex s danymi flags takto # -*- coding: cp1250 -*- 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!**' my_regex = re.compile(r"\*\*(?P<my_group>.+)\*\*", flags) print 'Text:\t%s' \ % re.sub(my_regex, r'<strong>\1</strong>', text, flags) print 'Text2:\t%s' \ % re.sub(my_regex, r'<strong>\1</strong>', text2, flags) Vystup python regexp.py Text: Příšerně <strong>žluťoučký kůň úpěl ďábelské tóny!</strong> Text2: Příšerně <strong>žluťoučký kůň úpěl ďábelské tóny!</strong> From: Vasco <[email protected]> To: [email protected] Date: 18.05.2009 11:30 Subject: [python] Zvláštní chování regulárnich výrazů Sent by: [email protected] 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. _______________________________________________ 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
