2016-05-31 5 views
2

"a"문자가없는 문자열에서 단어를 찾으려고합니다. 아래 코드를 작성했지만 작동하지 않습니다. 정규 표현식에 "포함하지 마십시오"라고 어떻게 말 할 수 있습니까? "^"기호를 "not"로 사용할 수 없습니까?Python 정규식 따기 "포함하지 않음"단어

r = re.compile(ur'\b[^\Wa]+\b', re.UNICODE) 
\W

\b 다음 유니 코드를 인식 될 것이다 :

import re 
string2 = "asfdba12312sssdr1 12şljş1 kf" 
t = re.findall(r'([^a]\w*) | \w*[^a] ', string2) 
print(t) 

그 코드의 결과는 당신은 re.UNICODE 플래그 단어 경계와 정규식을 사용할 필요가 "['sfdba12312sssdr1', '12şljş1']"

답변

2

입니다.

regex demo

[^\Wa]은 모든 유니 코드 문자, 숫자 또는 inderscore 있지만 a 일치를 참조하십시오. 대/소문자를 구분하지 않으려면 re.I 플래그를 추가하십시오.

단어를 자릿수와 일치시키지 않으려면 [^\W\da] 문자 클래스에 \d을 추가하십시오.

Python demo를 참조하십시오

# -*- coding: utf-8 -*- 
import re 
p = re.compile(ur'\b[^\Wa]+\b', re.UNICODE) 
s = u"asfdba12312sssdr1 12şljş1 kf" 
res = [x.encode('utf8') for x in p.findall(s)] 
print(res) 
+0

이 결과는 "re.compile ('\\ b [^ \\ Wa] + \\ b')" – abidinberkay

1

[^a]은 하나의 비 a 문자입니다. [^a]\w*은 하나의 비 - a 문자 다음에 임의의 수의 단어 문자가옵니다.

가장 쉽고 파이썬에서이 작업을 수행 할 수있는 가장 직관적 인 방법

전혀 re.findall를 사용하지 않는 ... 공간이 비 a 문자 참고하고, 단어 문자도 a를 포함 할 수 있습니다 :

[word for word in string2.split() if not 'a' in word] 
+0

이 코드는'word1,'또는'word2?! '를 단어로 취급합니다 (예 : 구두점과 기호). –

+0

@ WiktorStribiżew : 좋은 지적. 귀하의 예로서 말도 안되는 것을 사용하지 않을 경우 이익을 얻는 방법을 보여줄 것입니다. – Amadan

+0

'rx = re.compile (r '\ b \ w + \ b', re.UNICODE)'할 수있어 '단어 = [단어가 아니라면 rx.findall (string2)의 단어 ]'. – Jan

관련 문제