python - 如果字符串由单词列表中的单词组成,则匹配没有空格的字符串

标签 python string algorithm python-3.x

我有一个存储在列表中的单词列表:

[
    '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/

相关文章:

python - Ruby 的 bundler/Perl 的纸箱的 Python 等价物是什么?

python - 查找多行中两个关键字之间的大字符串序列

javascript - 如何区分时间字符串和非时间字符串

algorithm - 压缩jpeg的实用程序,效果与photoshop或更高

python - Django:搜索相关模型

javascript - 如何使用 JavaScript 中的任何高阶函数来为以下代码获取所需的输出?

c++ - 为什么我的数据流在 20 或 30 行后开始重复?

java - 关于按顺序排列的问题

algorithm - 找到使差异尽可能最小的质因数

python - 快速确定中心点和路径的方法