2012-10-25 67 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個單獨的正則表達式,以及像'block1_found = False'這樣的三個標誌。分別搜索它們中的每一個,然後檢查所有的標誌是否都是真的。把事情簡單化。 – 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

這是不好的。它的計算結果爲''a'in'abc'' – lunixbochs

+0

使用'和'它可以工作,但必須知道'a','b'和'c'的確切形式,這可能並非如此。 – kgr

+0

@lunixbochs:糟糕了。 – pogo

相關問題