2012-10-25 35 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

相关问题