2017-01-17 1 views
0

파이썬을 사용하여 여러 줄의 파일을 구문 분석하고 re.findall()을 사용하는 정규식을 수행합니다.선행 문자열이없는 문자열과 일치하는 정규식

문자열 "no foo"가 "bar"앞에 없다면 문자열 "bar"와 일치 시키려고합니다. 즉, "바"와 일치하지만 "바가 없으면"와 일치하지 않습니다. "bar"가 "no foo bar"외부에 나타나는 경우 일치해야합니다.

입력 :

1. candy bar 1 
2. no bar stool 
3. no foo bar here 
4. foo barred 
5. still no foo bar. 
6. foo bar! 
7. foobar! 
8. tricky no foo bar but has bar again 

원하는 출력 :

1. candy bar 1 
2. no bar stool 
4. foo barred 
6. foo bar! 
7. foobar! 
8. tricky no foo bar but has bar again 

이 내가 시도하고 있지만 성공했다하지 않은 표현과 유사합니다

(^|[^no foo ])bar 

코드 :

patterns = ["XXX", "(^|[^no foo ])bar"] 
joinedpatterns = "|".join(patterns) 
for line in lines: 
    for match in re.findall(joinedpatterns, line): 
     print 'found "%s"' % str(match) 
부정적인 모습 숨김라고 당신이 달성하려고하는 16,

답변

3

:

for line in lines: 
    for match in re.findall('(?<!no foo)bar', line): 
     print('found "%s"' % str(line)) 
+0

이 인쇄 "아니오 foo는 바 foo는 바 foo는 바"라인이 독특한 두 번 그겁니다. – Abra001

관련 문제