我需要编写一个正则表达式来获取下面列表中的所有字符..(删除列表中没有的所有字符)
allow_characters = "#.-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
Run Code Online (Sandbox Code Playgroud)
我不知道怎么做,我应该使用re.match或re.findall还是re.sub ......?
非常感谢提前.
根本不要使用正则表达式,首先转换allow_characters为集合,然后使用''.join()生成器表达式去除不需要的字符.假设您正在转换的字符串被调用s:
allow_char_set = set(allow_characters)
s = ''.join(c for c in s if c in allow_char_set)
Run Code Online (Sandbox Code Playgroud)
话虽如此,这是正则表达式的看法:
s = re.sub(r'[^#.\-_a-zA-Z0-9]+', '', s)
Run Code Online (Sandbox Code Playgroud)
您可以将您的allow_characters字符串转换为此正则表达式,但我认为第一个解决方案明显更直接.
编辑:正如DSM在评论中所指出的,str.translate()通常是一种非常好的方式来做这样的事情.在这种情况下,它有点复杂,但您仍然可以像这样使用它:
import string
allow_characters = "#.-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
all_characters = string.maketrans('', '')
delete_characters = all_characters.translate(None, allow_characters)
s = s.translate(None, delete_characters)
Run Code Online (Sandbox Code Playgroud)