2017-12-22 14 views
2

문자열에있는 선택적인 단어가있는 경우 무시할 필요가있는 부분을 찾을 수있었습니다.파이썬 정규식이 작동하지 않는 단어를 건너 뛰는

내가 노력 코드는 다음과 같습니다

import re 
    str = ''' 
     topping consensus estimates 
     topping analysis' consensus estimate 
     topping estimate 
    ''' 
    for m in re.finditer(r'(?P<p3c>topping\s+(?:\w+\s(?!estimate)){0,2}(estimate))',str): 
     print(m.group()) 
    print('done') 

나는 문자열에서 발견 된 세 ​​가지 경우 모두를 얻을 수 있지만 마지막 싶어. 토핑과 예상 사이에 두 단어까지 건너 뛰고 싶지만 분석과 합의가 될 것이라고 보장 할 수는 없습니다. 나는 (?:\w+\s(?!estimate)){0,2}으로 시도하여 최대 2 단어까지 건너 뛰고 결과를 얻지 만 어떤 이유로 작동하지 않습니다.

+0

"작동하지 않음"이란 무엇입니까? 더 구체적으로 말하십시오. –

답변

4

결과로 "토핑 예상치"를 얻을 필요가 없습니다. 당신이 이 정말로 인 지 알고 싶다면 각 줄이 topping으로 시작하고 그 다음에 2 또는 그 이하의 단어가 올 것인지 확인한 다음 estimate 또는 estimates인지 확인하십시오. 당신이 m 켜면 각 행에 대해이

^topping(\s\S+){0,2}\sestimates?\s*$ 

일치를, 또는 여러 라인 :

이 정규식은 당신을 도울 것입니다. 문자열이 요구 사항을 충족시키는 지 여부를 알려줍니다.

+0

고마워, 내 요구에 맞게 제안을 수정해야했지만 올바른 접근 방식을 가졌습니다. 나는 그들이 텍스트에서 어디에 있을지 모르기 때문에 그냥 r'topping (\ s \ S +) {0,2} \ sestimate을 사용하고 있습니다. – Pat

+0

@Pat 내 대답이 귀하의 질문에 대한 대답이라고 생각하시면 그 체크 표시를 클릭하여 동의하십시오! – Sweeper

+0

@Pat Define "더 이상 작동하지 않습니다." 뭐라 구요? 일치하는 것이 무엇을 기대합니까? 실제로 무엇이 일치 했습니까? – Sweeper