我有一个脚本,它接受一个参数并试图使用regex找到匹配项。对于单个值,我没有任何问题,但是当我传递多个单词时,顺序很重要。如何才能使regex返回,而不管所提供单词的顺序如何?下面是我的示例脚本:
import re
from sys import argv
data = 'some things other stuff extra words'
pattern = re.compile(argv[1])
search = re.search(pattern, data)
print search
if search:
print search.group(0)
print data
因此,根据我的示例,如果我将
"some things"
作为参数传递,则它匹配,但如果传递"things some"
,则它不匹配,我希望它匹配。或者,如果"some"
或"things"
匹配,我希望它也返回。传递的参数可能是regex
最佳答案
我想你想要这样的东西:
search = filter(None, (re.search(arg, data) for arg in argv[1].split()))
或者
search = re.search('|'.join(argv[1].split()), data)
然后您可以检查搜索结果,如果
len(search) == len(argv[1].split())
,则表示所有模式都匹配,if search
是真实的,则表示其中至少有一个匹配。好吧,我想我明白了,你可以使用这样的前瞻性断言:
>>> re.search('(?=.*thing)(?=.*same)', data)
显然,您可以通过编程方式构建这样的regex:
re.search(''.join('(?=.*{})'.format(arg) for arg in argv[1].split()), data)
关于python - 如何在python中以不同顺序正则表达式搜索字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48001465/