2013-08-29 2 views
-1

님이 작성하지 않은 파이썬 목록의 모든 단어와 일치합니다. 현재이 코드를 사용하여 모든 단어의 목록을 검색하고 있지만 그 앞에 @가있는 단어는 무시해야합니다.정규 표현식은 @

[@apples, peaches, oranges, @guava]

반환 단지 :

[peaches, oranges]

words = re.compile(r'\w+')

사람이 동일한 작업을 수행하려면 좀 도와 주 시겠어요?

+3

유효한 목록이 아닙니다. ''@apples ","peaches ","oranges ","@guava "]'(정규 표현식이 아닌 해결책을 제안한 답변자가 생각하는 것) 목록에있는 각 항목 주위에 따옴표가 있습니까? 사실 파이썬 문자열''[@apples, peaches, oranges, @guava] ''? –

답변

1

네거티브 룩어백을 사용하면됩니다. 이 같은 패턴은 작동합니다 :

(?<[email protected])\b\w+\b 

참고 \b (워드 경계) 그것이 pplesuava을 일치합니다 그들없이 전체 단어 — 일치하는지가 확인한다. , 인 l 원래

[x for x in l if not x.startswith('@') ] 

:

+0

OP가 단어 목록을 말하고 있기 때문에'find ('^ [^ @]') 충분하지 않습니까? – Hyperboreus

+0

@Hyperboreus OP가 하나의 문자열에서 여러 단어를 찾는다는 이야기라면, 아니오. OP가 하나의 단어를 포함하는 문자열 목록에 대해 이야기하는 경우 두 개의 다른 대답은 훨씬 더 우아합니다. –

6

f = [] 
for w in l: 
    if not w.startswith("@"): 
     f.append(w) 
6

이 시도, 왜이 ... 그것없이 비교적 간단한 작업을 보인다 정규식 다음 필요에 더 부담이 보인다 정규식 필터링되지 않은 목록.

또는 실제 목록 대신 생성기를 원하면 대괄호를 괄호로 대체하십시오.