2012-03-06 8 views
0

私はJinja2を使用しており、いくつかの特殊文字で正規表現を行いたいとします。私のテンプレートのJinjaでは、私はのように、ユニコードのようにPython上で動作するフィルタを呼び出します。Pythonで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) 

は、しかし、それはパターン "§70" なぜなら§文字を認識することはありません。 rをuで置き換えると、他のパターンは "Parágrafoúnico"として認識されません。

したがって、上記のすべてのパターンに一般正規表現を行うにはどうすればよいですか?

+0

あなたは、これが問題ですか? 're.match(r'§ '、'§ ')'は私のために一致を返します。 –

+0

しかし、それは "§"ではなく、 "§"です。 're.match(ur'§ '、'§ ')'では動作しますが、他のパターンではエラーになります。 –

+1

関数の最後に '' return mat''を追加すると、両方の式が一致します – izidor

答えて

1

使用ユニコードリテラルとmatch関数にUnicode文字列を渡します

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