Python:去除除空格和字母数字以外的所有内容

32

我有一个带有括号、逗号等字符的大字符串。我想去掉所有这些字符但保留空格。我应该如何做?目前我正在使用:

strippedList = re.sub(r'\W+', '', origList)

你为什么对你目前的解决方案不满意? - unwind
2
啊,我只需要将“''”改为“ ”。 失败了。 谢谢,伙计。 - j00niner
4个回答

47
re.sub(r'([^\s\w]|_)+', '', origList)

1
只是提醒一下,'|_' 会减慢你的正则表达式匹配速度。(当然,如果输入很小,这并不重要。) - Alice Purcell
1
@Ignacio,这里的 |_ 是做什么用的? - CKM
@chandresh:撤销在 ^\w 中的排除。 - Ignacio Vazquez-Abrams
1
我觉得我每周至少会想到这个答案一次。 - Arthur Camara

10

一个稍微更快的实现:

import re

pattern = re.compile('([^\s\w]|_)+')
strippedList = pattern.sub('', value)

8
正则表达式版本可能会更快(特别是如果您切换到使用编译的表达式),但我喜欢这个版本以增加清晰度:
"".join([c for c in origList if c in string.letters or c in string.whitespace])

对于使用join()函数可能会有些奇怪,但我认为这是转换字符列表为字符串的Python惯用方法。


1

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