【问题标题】:Regex with unicode in PythonPython中带有unicode的正则表达式
【发布时间】:2012-03-24 06:12:07
【问题描述】:

我正在使用 Jinja2 并想做一个带有一些特殊字符的正则表达式。在我的模板 Jinja 中,我调用了一个在 Python 上运行的过滤器,像 unicode 一样传递 text

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”。

那么,如何对以上所有模式做一个通用的正则表达式?

【问题讨论】:

  • 您确定这是问题所在吗? re.match(r'§', '§') 确实为我返回了匹配项。
  • 但不是“§”,而是 u“§”。使用re.match(ur'§', '§') 有效,但在其他模式中会出错。
  • 当我在函数末尾添加return mat 时,两个表达式都匹配

标签: python regex unicode ascii jinja2


【解决方案1】:

使用 unicode 文字并将 unicode 字符串传递给 match 函数:

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

【讨论】:

    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多