忽略列表中的特殊字符,不包括提到的字符

时间:2019-03-21 05:16:09

标签: python regex python-3.x

我一直在使用正则表达式忽略列表中的特殊字符。但是现在我想忽略特殊字符,排除用户提到的一些特殊字符。

我当前用于删除特殊字符的代码是:

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']

这是我的预期输出

$#%仅作为示例。用户可以提及任何特殊字符,我需要代码不删除用户提及的特殊字符,而是删除所有其他特殊字符。

2 个答案:

答案 0 :(得分:2)

将这些字符添加为

到正则表达式中
[re.sub('[^a-zA-Z0-9$#%]+', '', _)for _ in a]
                    ^^^

如@DYZ所述,您还可以使用 '[^\w$#%]+' 正则表达式

[re.sub('[^\w$#%]+', '', _)for _ in a]

UPDATE-1

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

然后用户在引号'之间输入特殊字符,并在必要时使用转义\