如何使用string.punctuation移除字符串标点但保留下划线?
问题:移除字符串中除下划线外的所有标点
你尝试用string.punctuation配合translate()方法移除字符串里的标点,但想要保留下划线,同时你疑惑自己写的这段代码是否正确:
fs = fs.translate({ord(i): None for i in string.punctuation if '_' not in string.punctuation})
首先得说,你的这段代码不正确。原因很简单:string.punctuation本身是包含下划线_的(它的完整内容是!"#$%&'()*+,-./:;<=>?@[\]^_{|}~`),所以`'_' not in string.punctuation`这个判断永远是`False`,最终生成的翻译表是空字典,根本不会移除任何标点。
正确的写法
我们需要做的是:遍历string.punctuation中的每个字符,只把不是下划线的字符加入到要移除的映射里。代码应该这样写:
import string fs = fs.translate({ord(i): None for i in string.punctuation if i != '_'})
这样一来,所有string.punctuation里除了下划线的标点,都会被映射为None(也就是被移除),而下划线会被保留下来。
内容的提问来源于stack exchange,提问作者pancakes
相关产品推荐
相关产品推荐

