[python] Zvláštní chování regulárnich výrazů

RMiklos na pss.sk RMiklos na pss.sk
Pondělí Květen 18 12:34:10 CEST 2009


?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:
RMiklos na pss.sk
To:
Konference PyCZ <python na py.cz>
Date:
18.05.2009 12:31
Subject:
Re: [python] Zvláštní chování regulárnich výrazů
Sent by:
python-bounces na py.cz



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 <vasco.vls na gmail.com> 
To: 
python na py.cz 
Date: 
18.05.2009 11:30 
Subject: 
[python] Zvláštní chování regulárnich výrazů 
Sent by: 
python-bounces na py.cz




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
Python na py.cz
http://www.py.cz/mailman/listinfo/python

_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20090518/47a5fd9b/attachment.htm>


Další informace o konferenci Python