从列表中查找子串 - python

时间:2017-04-11 20:38:20

标签: python list loops substring

我有一个列表,其中包含我想从字符串中删除的元素:

实施例

list = ['345','DEF', 'QWERTY']
my_string = '12345XYZDEFABCQWERTY'

有没有办法迭代列表并找到字符串中的元素?我的最终目标是从字符串中删除这些元素(我不知道这是否是正确的方法,因为字符串是不可变的)

1 个答案:

答案 0 :(得分:2)

您可以使用regex联盟:

import re

def delete_substrings_from_string(substrings, text):
    pattern = re.compile('|'.join(map(re.escape, substrings)))
    return re.sub(pattern, '', text)

print(delete_substrings_from_string(['345', 'DEF', 'QWERTY'], '12345XYZDEFABCQWERTY'))
# 12XYZABC
print(delete_substrings_from_string(['AA', 'ZZ'], 'ZAAZ'))
# ZZ

它使用re.escape来避免将字符串内容解释为文字正则表达式。

它只使用一次传递,因此它应该相当快,并确保第二个示例不会转换为空字符串。

如果您想要更快的解决方案,可以构建Trie-based regex out of your substrings