2

假设我有这两个正则表达式:

  1. id=123456
  2. discography=True

在事先不知道输入中这些字符串的顺序的情况下,如何检查它们是否都匹配正则表达式?

4

3 回答 3

6

您可以使用两个前瞻

^(?=.*id=123456)(?=.*discography=True)

从字符串 ( ^) 的开头,我们首先寻找id=123456任何地方(由于.*)。但是前瞻实际上并没有消耗任何东西,所以一旦找到模式,引擎就会跳回到它开始的地方(字符串的开头)并从第二个模式开始。

正如 eyquem 所指出的,如果您的字符串中有换行符,.*则不能越过它们,除非您使用该选项re.S(或者re.DOTALL- 这只是一个别名)。

但是,这看起来像您正在尝试解析 URL 的查询字符串。也许你应该看看urlparse

于 2012-12-08T10:30:46.980 回答
1

假设 r1 和 r2 是格式良好的正则表达式,您可以这样做:

re.compile("(?=%s)%s" % (r1, r2))
于 2012-12-08T10:30:01.517 回答
1

如果您正在为您的第一个和第二个正则表达式寻找独立检查,它应该通过检查您的正则表达式是否有结果来工作。

import re
results1 = re.search("id=([0-9]+)", "id=123456")
results2 = re.search("discography=(True|False)", "discography=True")
if results1 != None and results2 != None:
    print "Both matched"
于 2012-12-08T10:33:31.857 回答