2012-03-06 2 views
0

Jinja2를 사용 중이며 일부 특수 문자로 정규식을 수행하려고합니다. 내 템플릿 Jinja에서 파이썬에서 실행되는 필터를 호출합니다. text유니 코드과 같이 전달합니다.파이썬에서 유니 코드를 사용하는 Regex

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 기능에 유니 코드 문자열을 전달합니다

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