2010-04-28 5 views
3

"3 2"는 "9"와 "8"로 시작하기 때문에 "one two 9three 52eight four"이라는 문자열이 있으므로 " 52 ".단어가 숫자로 시작하지 않습니다

"(?!\d)\w+" 

을하지만 여전히 "세"와 "팔"을 복용 :

나는 시도했다. 나는 그것을 원하지 않는다. 나를 위해

답변

4

이 과잉 될 수

\b[a-zA-Z]\w* 
+0

고마워요. 이건 작동 중입니다. – pocoa

+0

이것은 분명히 맞는 대답입니다. +1은 소문자와 대문자 모두를 포함합니다. – ant

+0

@ c0mrade : 답은 무엇입니까? – SilentGhost

1

작품 미세 :

import re 

l = "one two 9three 52eight four".split() 
c = re.compile("(?!\d)\w+") 

m = [w for w in l if re.match(c, w)] 
print m 

인쇄 :

['one', 'two', 'four'] 
+0

이상한, 그가 처음 단어로 갈라 때문에, – pocoa

+0

@pocoa을이를 http://tinyurl.com/2ctzevm 확인하고 시작 일치 할 필요 re.match''와 단어 한 단어를 확인 문자열의. 그 이유는 9시와 52 시가 일치하지 않는 이유입니다. – YOU

+0

@ S.Mark이 공용 컴퓨터에는 Python이 설치되어 있지 않습니다. 그래서 나는 온라인 도구에 의존하고 있습니다. 미안 @ miles82! – pocoa

2

\w이 수를 포함하기 때문에입니다. 당신이해야 할 것은 : 당신이 (?!...)를 사용하는 것은 부정적인 모습 미리 이른바 또한 ​​

>>> s = "one two 9three 52eight four" 
>>> import re 
>>> re.findall(r'\b[a-z]+\b', s, re.I) 
['one', 'two', 'four'] 

, 당신은 아마 의미 동안보기 숨김 (?<!...) 물론 여전히 때문에 상기의 실패하는 부정적 발행물.

ETA는 :

>>> re.findall(r'\b(?!\d)\w+', s) 
['one', 'two', 'four'] 
+0

감사합니다. 죄송합니다. 충분한 정보를 제공하지 않았습니다. 숫자와 별자리가 있지만 "four8"은 괜찮 으면 일치하는 것을 원하지 않습니다. – pocoa

+0

감사합니다. 두 번째 예도 효과적입니다. – pocoa

0

정규 표현식을보십시오 : 당신은 단지 하나의 단어 경계를해야합니다.

In [3]: [word for word in eg.split(' ') if not word[0].isdigit()] 
Out[3]: ['one', 'two', 'four'] 
관련 문제