正则表达式与应有的不匹配

Regex doesn't match what it should

我正在尝试过滤除字母数字字符、俄语字母、换行符、空格、逗号、点、问号、感叹号、斜线、#@、冒号和括号。

到目前为止我的代码:

re.sub(r"[^А-я\w\d"+"\n"+" ,.?!ё/@#:()]", "", string)

但是,它不会清除以下字符串:""。 为什么不,我怎样才能做到这一点?

编辑::忘记提及它在 https://regexr.com/

时按预期工作

你可以让它只匹配你需要的类型。而不是你不需要的字符串类型。

这应该有效 [А-я\w\d\"+\"\n\"+\" ,.?!ё/@#:()]

您可以检查 this link 处的字符串,您会看到 "" 字符串由属于 \p{L} 类别的字符组成。您的正则表达式以 [^А-я\w\d 开头,这意味着它匹配除俄语字符以外的任何字符(ё(稍后定义)和 Ё 除外)、任何 Unicode 字母(any 因为在 Python 3 中,\w - 默认情况下 - 匹配任何 Unicode 字母数字字符和连接符。

您似乎只想删除俄文和英文字母,因此请使用相应的范围:

r"[^А-ЯЁа-яёA-Za-z0-9\n ,.?!/@#:()]+"

匹配

以外的一个或多个chas
  • А-ЯЁа-яё - 俄文字母
  • A-Za-z - ASCII 字母
  • 0-9 - ASCII 数字
  • \n ,.?!/@#:() - 换行符、space、逗号、点、问号和感叹号、斜线、& 符号、井号、冒号和圆括号。