我一直在使用正则表达式忽略列表中的特殊字符。但是现在我想忽略特殊字符,排除用户提到的一些特殊字符。
我当前用于删除特殊字符的代码是:
final_list=[re.sub('[^a-zA-Z0-9]+', '', _)for _ in a]
当我想删除列表中的所有特殊字符时,此方法很好用。
输入:
["on@3", "two#", "thre%e"]
输出:
['on3', 'two', 'three']
但是我的期望是,我忽略$#%
以外的特殊字符
输入:
["on@3", "two#", "thre%e"]
输出:
['on3', 'two#', 'thre%e']
这是我的预期输出
$#%
仅作为示例。用户可以提及任何特殊字符,我需要代码不删除用户提及的特殊字符,而是删除所有其他特殊字符。
答案 0 :(得分:2)
将这些字符添加为
到正则表达式中[re.sub('[^a-zA-Z0-9$#%]+', '', _)for _ in a]
^^^
如@DYZ所述,您还可以使用 '[^\w$#%]+'
正则表达式
[re.sub('[^\w$#%]+', '', _)for _ in a]
import re
a = ["on@3", "two#", "thre%e"]
special_char_to_be_removed = "%" # here you can change the values
regex = '[^\w{your_regex}]+'.format(your_regex=special_char_to_be_removed)
[re.sub(regex, '', _)for _ in a]
答案 1 :(得分:0)
只需将字符列表添加到列表中即可。
import re
a = ["on@3", "two$", "thre%e"]
final_list = [re.sub('[^a-zA-Z0-9\$#%]+', '', _) for _ in a]
print final_list
输出
['on3', 'two$', 'thre%e']
$
在正则表达式中具有含义,因此您需要使用\
如果要接受用户输入,只需使用
import re
a = ["on@3", "two$", "thre%e"]
except_special_chars = input('Exceptions:')
final_list = [re.sub('[^a-zA-Z0-9'+str(except_special_chars)+']+', '', _) for _ in a]
print final_list
然后用户在引号'
之间输入特殊字符,并在必要时使用转义\
。