如果一个字符串包含在另一个字符串中,我想匹配,无论字符的顺序如何。 例如,如果我有一个字符串潜艇,我希望能够将海军陆战队检测为匹配。
我目前正在处理的方式是通过列表:
def match(x, y):
x, y = list(x), list(y)
for i in x:
try:
y.remove(i)
except ValueError:
return False
return True
但是当我尝试匹配许多组合时,效率很低。
我当时认为使用正则表达式,但没有成功。
有什么想法吗?
答案 0 :(得分:2)
您可以使用字符类 [SEARCH_WORD]
,其中每个字符都将被独立搜索。通过在其后设置+
量词,您将查找1个或多个字符,并通过添加\b
字边界,您只会匹配整个字词:
r'\b[submarine]+\b'
请参阅the regex demo和IDEONE demo:
import re
s = "I have a string submarine I want to be able to detect marines as a match"
kw = "submarine"
r = re.compile(r"\b[{0}]+\b".format(kw))
print(r.findall(s))
注意:如果您的输入可以包含非单词字符,尤其是^
,]
,\
或-
等字符,请转义使用re.escape
并使用r"(?<!\w)[{0}]+(?!\w)".format(re.escape("submarine"))
的人。
import re
s = "I have a string ^submarine I want to be able to detect ^marines as a match"
kw = "^submarine"
r = re.compile(r"(?<!\w)[{0}]+(?!\w)".format(re.escape(kw)))
print(r.findall(s))
请参阅IDEONE demo