我有一个列表,其中包含我想从字符串中删除的元素:
实施例
list = ['345','DEF', 'QWERTY']
my_string = '12345XYZDEFABCQWERTY'
有没有办法迭代列表并找到字符串中的元素?我的最终目标是从字符串中删除这些元素(我不知道这是否是正确的方法,因为字符串是不可变的)
答案 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。