Регулярное выражение с Unicode в Python - PullRequest
0 голосов
/ 06 марта 2012

Я использую Jinja2 и хочу сделать регулярное выражение с некоторыми специальными символами.В моем шаблоне Jinja я вызываю фильтр, который работает на Python, передавая text как unicode .

def insert_link(text, link):

  artigo_pattern = r"art(\.|(igo))?\s?\d+\s?(o|º|\.)?"

  #Pattern with error
  paragrafo_pattern = r"(§\s?\d+\s?(o|º|\.)?)|(par(a|á|Á)grafo\s(u|ú|Ú)nico)"

  alinea_pattern = r"[a-z]\s?\)"

  finalPattern = ')|('.join([
    artigo_pattern , paragrafo_pattern, alinea_pattern
  ])
  finalPattern = ''.join([ "((", finalPattern, "))" ])

  mat = re.match(finalPattern, text, re.IGNORECASE)

Но он никогда не распознает шаблон " § 7o потому что § характер.Когда я заменяю r на u, другие шаблоны не распознаются как «Parágrafo único».

Итак, как сделать общее регулярное выражение для всех шаблонов выше?

1 Ответ

1 голос
/ 07 марта 2012

Используйте литералы Unicode и передавайте строки Unicode в функцию match:

>>> re.sub(ur"§|a|á|Á", u"_", u"Halo §Ásdf")
u'H_lo __sdf'
...