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

Ale*_*lex 5 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"
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 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
Run Code Online (Sandbox Code Playgroud)

查看Python 演示

细节

  • [^-匹配任何字符的否定字符类的开始,但是......
    • \s- 空白
    • \w- 单词字符(字母、数字或/和_
    • '- 单引号
    • &- 一个&符号 - %- 一个%符号
    • -- 连字符(因为它位于末尾,所以它将被解析为文字-
  • ]- 字符类结束。

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

请参阅此答案,了解如何在 Python 正则表达式字符类中使用文字连字符的更多信息。