2012-09-25 6 views
2

밑줄을 제외하고 유니 코드에서 두 자의 sumbols를 모두 찾아야합니다. 현재 solutin은 다음과 같습니다Python regex exclude Underscore

pattern = re.compile(ur'(?:\s*)(\w{2})(?:\s*)', re.UNICODE | re.MULTILINE | re.DOTALL) 
print pattern.findall('a b c ab cd vs sd a a_ _r') 
['ab', 'cd', 'vs', 'sd', 'a_', '_r'] 

내가 정규식에서 _ 밑줄을 제외해야하므로 A__r가 발견되지 않습니다. 문제는 제 캐릭터가 어떤 언어로든있을 수 있다는 것입니다. 그래서 나는 정규식을 이런 식으로 사용할 수 없다 : [^ a-zA-Z]. 예를 들어, 러시아어 :

print pattern.findall(u'ф_') 

답변

8

는 _

[^\W_] 

대신

\w 
비 단어 문자이야 아무것도 제외 및
9

가장 좋은 방법 대신 새로운 regex module을 사용하는 것입니다. 그 중 하나는 기능이 문자 세트에서 문자를 제거 할 수 있다는 것입니다입니다 :

import regex as re 

pattern = re.compile(ur'(?:\s*)([\w--_]{2})(?:\s*)', re.UNICODE | re.MULTILINE | re.DOTALL) 

[\w--_] 구문은 일치하는 문자에서 제거 밑줄 문자로 \w과 동일한 문자 집합을 만듭니다.