Python 以任意顺序匹配所有正则表达式条件

Python 以任意顺序匹配所有正则表达式条件,python,regex,Python,Regex,我有一个网页,我想刮使用正则表达式。该页面最多可以包含我关心的3个文本块 如果所有三个文本块都存在,那么它应该返回匹配,否则不返回匹配。文本可以按页面上的任何顺序排列 我尝试过这个,但它不满足“任何订单”要求: re_text = (Text block 1)((.|\n)*)(Text block 2)((.|\n)*)(Text block 3) re_compiled = re.compile(re_text) 我应该在这里使用反向引用吗?或者有其他解决方案吗?单独寻找它们怎么样 re_

我有一个网页,我想刮使用正则表达式。该页面最多可以包含我关心的3个文本块

如果所有三个文本块都存在,那么它应该返回匹配,否则不返回匹配。文本可以按页面上的任何顺序排列

我尝试过这个,但它不满足“任何订单”要求:

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

我应该在这里使用反向引用吗?或者有其他解决方案吗?

单独寻找它们怎么样

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

if all(r.search(text) for r in re_texts):
    # all matches found

实际的解决办法是。您真的应该使用XML解析器。您可以有3个单独的正则表达式和3个标志,如
block1\u found=False
。分别搜索它们中的每一个,然后检查是否所有标志都为true。保持简单。您可以使用运算符中的
查看文本块是否在文本中。@Pogo:是,假设文本块是常量文本。@ernie除非XML解析器可以处理损坏的XML,因为网页源不能保证是有效的XML。这是错误的。它的计算结果是abc中的
'a',使用
它会工作,但是你必须知道
a
b
c
的确切形式,这可能不是事实。@kgr:OP说文本块是常量textPogo我不是说你的答案是错误的,事实上,我比@nneonneo提供的更喜欢它,因为它更短,也许更高效。我只是想说清楚,它不会在所有情况下都起作用,但在这种情况下,它可能会真的起作用:)…这不起作用<代码>'a'和'b'以及'c'
的计算结果为
'c'
,因为它是链的最后一个元素。另外,'ayz'中的
('a'和'b'和'c')
在我的Python上给了我
False
,所以我想你一定是编好了输出。。。
>>> ('a' and 'b' and 'c') in 'xyz'
False
>>> ('a' and 'b' and 'c') in 'ayz'
True
>>> ('a' and 'b' and 'c') in 'abc'
True