我有一个脚本,它接受一个参数并试图使用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/

10-10 03:41