Python 如何从原始文本中删除标点符号数组

Python 如何从原始文本中删除标点符号数组,python,list,Python,List,我有这样的标点数组 punctuation_data = [ '=' '+' '_' '-' ')' '(' '*' '&' '^' '%' 'SSSS' 'AAAA' 'wwww' '!' '~' '،'] 我有文本来删除这个文本的标点符号,我使用这个,但它不起作用 list = [''.join(c for c in original_data if c not in punctuation_data) for s in list] 编辑:原始帖子没有删除更长的子字符串。我包含

我有这样的标点数组

punctuation_data = [ '=' '+' '_' '-' ')' '(' '*' '&' '^' '%'
'SSSS' 'AAAA' 'wwww' '!' '~' '،']
我有文本来删除这个文本的标点符号,我使用这个,但它不起作用

list = [''.join(c for c in original_data if c not in punctuation_data) 
for s in list]

编辑:原始帖子没有删除更长的子字符串。我包含了一个函数,它循环遍历标点数据并删除子字符串

您需要用逗号分隔列表。另外,不要使用预定义的名称,如列表

这将有助于:

punctuation_data = [ '=', '+', '_', '-', ')', '(', '*', '&', '^', '%',
'SSSS', 'AAAA', 'wwww', '!', '~', '،']

orig_string = ['3+5=8']

def delete_substrings(orig_sub_string, punctuation_data):
    for element_to_delete in punctuation_data:
        orig_sub_string = orig_sub_string.replace(element_to_delete, "")
    return orig_sub_string

lst = [''.join(c for c in orig_sub_string if c not in punctuation_data) for orig_sub_string in orig_string]

print(lst) #['358']

由于您正在尝试匹配许多长度不同的字符串,因此最好使用正则表达式。首先使用re.Escape对字符串进行转义,以便它们不会在正则表达式中被解释为特殊字符:

import re
punctuation_data = [ '=', '+', '_', '-', ')', '(', '*', '&', '^', '%', 'SSSS', 'AAAA', 'wwww', '!', '~', '،']
print(re.sub('|'.join(map(re.escape, punctuation_data)), '', 'abc*xyzAAAA123'))
这将产生:

abcxyz123
这是为我工作

original_data = 'What is hello'
punctuation_data = [ '=' '+' '_' '-' ')' '(' '*' '&' '^' 
'%'
'SSSS' 'AAAA' 'wwww' '!' '~' '،']
original_data = original_data.split()

resultwords  = [word for word in original_data if 
word.lower() not in punctuation_data]
result = ' '.join(resultwords)

print result

请同时提供原始的\u数据,以便其他人可以复制。这与标点符号\u数据中的任何多字符串都不匹配。@准确地说,我该怎么做?在循环中使用str.replace方法效率很低,因为它需要扫描整个字符串,扫描次数与标点符号\u数据中的字符串数相同。