使用Python从字符串中剥离所有非字母数字字符的最佳方法是什么?

在这个问题的PHP变体中提出的解决方案可能会进行一些小的调整,但对我来说似乎不太“python化”。

声明一下,我不只是想去掉句号和逗号(以及其他标点符号),还想去掉引号、括号等。


当前回答

对于简单的一行代码(Python 3.0):

''.join(filter( lambda x: x in '0123456789abcdefghijklmnopqrstuvwxyz', the_string_you_want_stripped ))

对于Python < 3.0:

filter( lambda x: x in '0123456789abcdefghijklmnopqrstuvwxyz', the_string_you_want_stripped )

注意:如果需要,您可以将其他字符添加到允许字符列表中(例如:“0123456789 abcdefghijklmnopqrstuvwxyz。_”)。

其他回答

作为这里其他一些答案的衍生,我提供了一种非常简单而灵活的方法来定义您想要限制字符串内容的一组字符。在这种情况下,我允许字母数字加破折号和下划线。只需添加或删除字符从我的PERMITTED_CHARS适合您的用例。

PERMITTED_CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-" 
someString = "".join(c for c in someString if c in PERMITTED_CHARS)

正则表达式的拯救:

import re
re.sub(r'\W+', '', your_string)

根据Python定义'\W == [^a-zA-Z0-9_],它不包括所有数字、字母和_

for char in my_string:
    if not char.isalnum():
        my_string = my_string.replace(char,"")
sent = "".join(e for e in sent if e.isalpha())

如果你想保留像áéíóúãẽĩõũ这样的字符,使用这个:

import re
re.sub('[\W\d_]+', '', your_string)