Python正则表达式是否逃脱

时间:2013-10-25 22:08:22

标签: python regex

我需要编写一个正则表达式来获取下面列表中的所有字符。 (删除列表中没有的所有字符)

allow_characters = "#.-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

我不知道怎么做,我是否应该使用re.match或re.findall或re.sub ...?

提前多多感谢。

1 个答案:

答案 0 :(得分:7)

根本不要使用正则表达式,首先将allow_characters转换为集合,然后使用带有生成器表达式的''.join()去除不需要的字符。假设您正在转换的字符串称为s

allow_char_set = set(allow_characters)
s = ''.join(c for c in s if c in allow_char_set)

话虽如此,以下是正则表达式的看法:

s = re.sub(r'[^#.\-_a-zA-Z0-9]+', '', s)

您可以将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)