禁止在python中使用正则表达式[duplicate]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

我正在写一个正则表达式来满足以下条件:

不得指定短标识符小于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

但是在我的脚本中运行这样的正则表达式似乎很好。使用正则表达式过滤掉此类字符是否正确?

python regex python-3.7 regex-lookarounds
1个回答
1
投票

[挖了一些之后,我找到了这个答案:https://stackoverflow.com/a/32574077/12167858

简而言之:至少在python 3中,该范围内的字符在宽的Unicode字符串中只是不是事物,因此您执行正则表达式的工作是因为不包含此类字符。 Python似乎忽略了不合逻辑的命令并继续前进。但是正因为如此,尽管运行良好,regex101仍将其标记为错误。

要回答您的问题:是的,但是也没有。它根本不会做任何事情。我建议删除\u8000-\udfff部分。

© www.soinside.com 2019 - 2024. All rights reserved.