此问题已经在这里有了答案:
我正在写一个正则表达式来满足以下条件:
不得指定短标识符小于00A0的字符0024($),0040(@)或0060(’)以外的任何一个,不在范围内D800至DFFF。
我写了以下正则表达式:
PATTERN = ([\u0024\u0040\u0060]|(?![\u0000-\u00A0])|(?![\u8000-\udfff]))
并如下使用它进行搜索
str = #some str
search = re.search(PATTERN, str, re.UNICODE)
我感到困惑的是\u8000 - \udfff
被代理
DEMO。
但是在我的脚本中运行这样的正则表达式似乎很好。使用正则表达式过滤掉此类字符是否正确?
[挖了一些之后,我找到了这个答案:https://stackoverflow.com/a/32574077/12167858
简而言之:至少在python 3中,该范围内的字符在宽的Unicode字符串中只是不是事物,因此您执行正则表达式的工作是因为不包含此类字符。 Python似乎忽略了不合逻辑的命令并继续前进。但是正因为如此,尽管运行良好,regex101
仍将其标记为错误。
要回答您的问题:是的,但是也没有。它根本不会做任何事情。我建议删除\u8000-\udfff
部分。