过滤掉特殊字符但保留一些

时间:2017-08-23 09:32:09

标签: python regex

我想过滤掉字符串中的特殊字符,但我也希望保留其中的一些字符(例如,我想保留撇号,&, - ,%)

此代码将保留撇号,但如何添加我想要保留的其他符号?

msg = 'Hi! I'm Mike, I like M&M. How are you?' 

pattern = re.compile("[^\w']")
pattern.sub ('', msg)

>>Output Desired: "Hi I'm Mike I like M&M How are you"

1 个答案:

答案 0 :(得分:3)

像这样添加:

import re
msg = "Hi! I'm Mike, I like M&M. How are you?"
pattern = re.compile(r"[^\s\w'&%-]")
print(pattern.sub ('', msg)) # => Hi I'm Mike I like M&M How are you

请参阅Python demo

<强>详情

  • [^ - 匹配任何字符的否定字符类的开头,但......
    • \s - 空白
    • \w - 字char(字母,数字或/和_
    • ' - 单引号
    • & - &符号 - % - %符号
    • - - 一个连字符(因为它在结尾处,它将被解析为文字-
  • ] - 字符类的结尾。

请注意,您可以转义连字符以确保它将被解析为文字-,即使您在其后添加更多字符并忘记将其转义:r"[^\s\w'&%\-]"

请参阅this answer以了解如何在Python正则表达式字符类中使用文字连字符。