【发布时间】: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