如何在Python 3中从字符串中白名单字符?

4

我的问题非常简单,我正在尝试从字符串中去除任何不是A-Z或0-9的字符。

基本上,这是我正在尝试执行的过程:

whitelist=['a',...'z', '0',...'9']

name = '_abcd!?123'

name.strip(whitelist)

print(name)

>>> abcd123

重要的是要知道我不能仅仅打印名称中的有效字符。 我需要实际使用变量的更改状态。
3个回答

7
你可以使用re.sub并提供准确匹配你想要删除的内容的模式:
import re
result = re.sub('[^a-zA-Z0-9]', '', '_abcd!?123')

输出:

'abcd123'

FYI,[^ ] 语法是正则表达式中的否定范围。 - wisbucky

3

使用列表推导式与string模块

import string
whitelist = set(string.ascii_lowercase + string.digits)
name = ''.join(c for c in name if c in whitelist)

如果您不想使用reregex,以下是更好的方法。 - Muneeb Ahmad Khurram

1

你可以使用简单的正则表达式:

new_string = re.sub('[chars to remove]', '', old_string)

请注意,字符串是不可变的。如果要更改一个字符串,您需要分配一个新变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接