假设我有这两个正则表达式:
id=123456
discography=True
如何在不事先知道输入中这些字符串的顺序的情况下检查它们是否都匹配正则表达式?
答案 0 :(得分:6)
您可以使用两个lookaheads:
^(?=.*id=123456)(?=.*discography=True)
从字符串(^
)的开头,我们首先在任何地方查找id=123456
(由于.*
)。但是前瞻实际上并没有消耗任何东西,所以一旦找到模式,引擎会跳回到它开始的位置(字符串的开头)并从第二个模式开始。
正如eyquem所指出的,如果你的字符串中有换行符,.*
无法通过它们,除非你使用选项re.S
(或re.DOTALL
- 这只是别名)。
但是,这看起来像是在尝试解析URL的查询字符串。也许你应该看看urlparse
。
答案 1 :(得分:1)
假设r1和r2是格式正确的正则表达式,你可以这样做:
re.compile("(?=%s)%s" % (r1, r2))
答案 2 :(得分: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"