2010-04-09 3 views
4

foo은 아니지만 bar이 아닌 모든 행을 찾기 위해 Python 프로그램을 검색 할 정규식을 찾고 있는데, 이는 키워드 인수로 메소드에 전달됩니다. 나는 lookahead와 lookbehind 단언으로 놀고있다. 그러나 운이별로 없다.정규식에서 A가 아닌 B를 찾을 수 있습니다.

어떤 도움이 필요합니까?

감사

답변

5

당신이 찾고자하는 문자열 foo와 현재해서는 안 다른 문자열 bar이있는 경우, 당신이 사용할 수 있습니다 정확하게가 모든 증거 요구 사항을 만족하는지 정규 표현식을 만들기

^(?!.*bar).*foo 

을 파이썬 코드가 일반 언어가 아니기 때문에 요구 사항은 매우 어렵습니다. 그러나 필요에 따라이 코드를 시작점으로 사용할 수 있어야합니다.

+0

나는 모든 사건은 같은 라인에있는, 내가 놓칠 경우 일부는 '아무튼 상당히 확신 문제 없습니다. 방금 일부 문맥을 제공하기 위해 파이썬을 언급했습니다. – Zach

+0

이것은 작동합니다 ... 감사합니다 ..... + 1 그리고 올바른 것으로 선택했습니다 – Zach

+0

@Zach, Mark가 의미하는 바는 'bar'문자열은 키워드가 없어도 발생할 수 있다는 것입니다 (또는 식별자를 의미합니까?) : 문자열 리터럴 또는 주석의 일부입니다. –

2

^ 이후에 이러한 시나리오의 미리보기가 항상 더 잘 작동하는 것처럼 보입니다. 그것을 읽으면 나에게도 더 이해가됩니다.

(?!.*bar)^.*foo

this has a foo   # pass 
so does this has a foo # pass 
i can haz foo   # pass 
but i haz foo and bar! # fail 
+0

'^'를 이전보다 대신 넣은 후에 "더 잘"작동하는 문자열을 게시 할 수 있습니까? –

+0

고마워요. + 1하지만 시간이 지났습니다. – Zach

+0

큰 소품, 파이썬 정규식 해결. 특정 이름의 모든 파일을 찾으려고했으나 물결표 백업 파일을 제외하려고했습니다. (?!. * ~) ^. * filename.ext – Halsafar

2

또한하지 정규식이 할 수 있습니다 :

for line in file: 
    if "foo" in line and "bar" not in line: 
     #do something 
+0

많은 파일을 검색 중이므로 정규 표현식을 사용하고 파일 이동을 처리하는 도구를 사용하는 것이 훨씬 쉽습니다. 고마워요. – Zach

+0

. 나는 정규 표현식을 좋아하고 매일 사용한다. 때로는 프로그램에서 원하는 것을 정확하게 말해야하며 두통을 피할 수 있다는 점을 명심해야합니다. ;) – Ipsquiggle

관련 문제