2012-10-25 3 views
0

정규식을 사용하여 긁고 싶은 웹 페이지가 있습니다. 페이지에는 최대 3 개의 텍스트 블록이 포함될 수 있습니다.임의의 순서로 모든 정규식 조건 일치

텍스트 블록이 모두있는 경우 일치 항목을 반환하고 그렇지 않으면 일치하는 항목을 반환하지 않아야합니다. 텍스트는 페이지의 어떤 순서로도 될 수 있습니다.

나는이 시도, 그러나 "순서"요구 사항을 충족하지 않습니다

re_text = (Text block 1)((.|\n)*)(Text block 2)((.|\n)*)(Text block 3) 
re_compiled = re.compile(re_text) 

내가 여기 역 참조를 사용해야을? 아니면 다른 해결책이 있습니까?

+2

실제 솔루션이다 정규식을 사용하지 않는 (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) . 실제로 XML 파서를 사용해야합니다. . . – ernie

+0

당신은 3 개의 별도의 regexes와'block1_found = False'와 같은 3 개의 플래그를 가질 수 있습니다. 각각에 대해 개별적으로 검색 한 다음 모든 플래그가 참인지 확인하십시오. 단순하게 유지하십시오. – Marius

+0

'in' 연산자를 사용하여 텍스트 블록이 텍스트에 있는지 확인할 수 있습니다. – pogo

답변

3

개별적으로 개별적으로 찾는 것이 어떨까요?

re_texts = [re.compile('textblock1'), re.compile('textblock2'), re.compile('textblock3')] 

if all(r.search(text) for r in re_texts): 
    # all matches found 
0
>>> ('a' and 'b' and 'c') in 'xyz' 
False 
>>> ('a' and 'b' and 'c') in 'ayz' 
True 
>>> ('a' and 'b' and 'c') in 'abc' 
True 
+0

이것은 좋지 않습니다. 그것은 'abc'에서''a '로 평가됩니다. – lunixbochs

+0

'및'으로 작동하지만, 사실이 아닌'a','b' 및'c'의 정확한 형태를 알아야합니다. – kgr

+0

@lunixbochs : 죄송합니다. – pogo