regex 为什么我的正则表达式匹配非ascii字符?

efzxgjgh  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(128)

我尝试过滤除字母数字字符、俄语字母、换行符、空格、逗号、点、问号、感叹号、斜杠、#@、冒号和括号之外的任何内容。
我的regex到目前为止:r"[^А-я\w\d\n ,.?!ё/@#:()]"
但是,它与以下字符串不匹配:"𝕾𝖍𝖎𝖗𝖔𝖓"。为什么不呢?我怎么才能让它这样做呢?

**编辑:**忘了提它在https://regexr.com/上按预期工作

csbfibhn

csbfibhn1#

您可以在此链接检查字符串,您将看到“𝕾𝖍𝖎𝖗𝖔𝖓”字符串由属于\p{L}类别的字符组成。正则表达式以[^А-я\w\d开头,这意味着它匹配除俄语字符(ё(稍后定义)和Ё除外)、任何Unicode字母(any,因为在Python 3中,默认情况下,\w匹配任何Unicode字母数字字符和连接符标点符号。
您似乎只想删除俄语和英语字母,因此请使用相应的范围:

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

它匹配一个或多个除

  • А-ЯЁа-яё-俄文字母
  • A-Za-z- ASCII字母
  • 0-9- ASCII数字
  • \n ,.?!/@#:()-换行符、空格、逗号、点、问号和感叹号、斜杠、&符号、散列、冒号和圆括号。
v440hwme

v440hwme2#

你可以让它只匹配你需要的类型。而不是不需要的字符串类型。
这应该可以工作[А-я\w\d\"+\"\n\"+\" ,.?!ё/@#:()]

相关问题