2014-10-31 6 views
-1

내가 짧은 질문이 예상대로 작동하지 않습니다 : 나는NLTK의 regexp_tokenizer는

[u'lala/yaya'] 

나는 생각했다

nltk.regexp_tokenize("lala/yaya", r"\w+(['[email protected]&]\w+)*" ) 

pattern = r"\w+(['[email protected]&]\w+)*" 

나는 뭔가를 놓친다. \ w는 영숫자와 일치하며 ', -, @ 및 &을 포함합니다. 그 사이의 "/"가 어떻게 일치 할 수 있습니까?

출력이 "lala", "yaya"여야한다고 생각합니다.

누구든지 설명 할 수 있습니까? 매우 감사합니다.

답변

2

문제는 주로 문자 클래스 ['[email protected]&] 안에 하이픈 위치가 있기 때문에 발생합니다. '에서 @ (/)의 범위에있는 모든 문자와 일치합니다.). 첫 번째 또는 마지막에 - (문자 클래스의 )을 입력하거나 이스케이프 처리를해도 하이픈은 범위 연산자처럼 작동하지 않습니다.

[-'@&] 

각 문자의 ascii 값을 참조하십시오. here.

예 :

>>> re.findall(r"\w+(?:['[email protected]&]\w+)*", 'lala/yaya') 
['lala/yaya'] 
>>> re.findall(r"\w+(?:[-'@&]\w+)*", 'lala/yaya') 
['lala', 'yaya'] 
+0

변화 하이픈의 위치 '[-'@ &]'또는'[ '@ 및 -]'또는'['\ - & @]' –

관련 문제