我有一个存储在列表中的单词列表:
[
'investment',
'property',
'something',
'else',
'vest'
]
我还有一个字符串列表,像这样
[
'investmentproperty',
'investmentsomethingproperty',
'investmentsomethingelseproperty',
'abcinvestmentproperty',
'investmentabcproperty'
]
给定这个单词列表和字符串列表,我需要确定哪些字符串包含单词列表中仅个单词,并且这些单词的数量最多。
在上面的示例中,如果单词的最大数量为 3,则只有字符串列表中的前两项会匹配(即使单词“vest”在“investment”中也是如此。
此示例简化了单词列表和字符串列表 - 实际上有数千个单词和数十万个字符串。所以这需要是高性能的。所有的字符串都不包含空格。
我试过像这样构造一个正则表达式:
^(?:(word1)|(word2)|(word3)){1,3}$
但是对于单词列表中的单词数量(当前为 10,000)来说,这是非常慢的。
谢谢
最佳答案
您预计需要多少时间?我测试了以下代码:
_list = ['investmentproperty'] * 100000
_dict = [
'investment',
'property',
'something',
'else'
] * 1000
regex = re.compile("^(?:" + "|".join(_dict) + "){1,3}$")
for i in _list:
result = regex.match(i)
#cost 5.06s
for i in _list:
result = re.match("^(?:" + "|".join(_dict) + "){1,3}$", i)
#cost 11.04s
我认为使用 100000 长度的列表和 4000 长度的字典,性能不错,对吧?
关于python - 如果字符串由单词列表中的单词组成,则匹配没有空格的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44126826/