“\z”锚点在 Python 正则表达式中不起作用

the*_*ter 3 python regex

我有一个下面的正则表达式,

/\A(\d{5}[A-Z]{2}[a-zA-Z0-9]{3,7}-TMP|\d{5}[A-Z]{2}\d{3,7}(\-?\d{2})*)\z/
Run Code Online (Sandbox Code Playgroud)

我正在检查下面的字符串。我猜第一个和第三个应该返回匹配,第二个应该返回不匹配。但我没有在所有 3 项上都匹配。我的正则表达式是否错误?

99844RI1800001
99806CAAUSJ-TMP1
99844RI1800002
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 6

Pythonre不支持\\z,它支持\\Z作为等效模式匹配字符串的最末尾。您的模式要求文字z字符位于模式的末尾。

\n\n

请参阅Rexegg.com参考:

\n\n
\n

\xe2\x9c\xbd 在 Python 中,标记的作用与其他引擎中的作用\\Z相同\\z:它仅匹配字符串的最末尾。

\n
\n\n

因此你可以使用

\n\n
\\A(\\d{5}[A-Z]{2}[a-zA-Z0-9]{3,7}-TMP|\\d{5}[A-Z]{2}\\d{3,7}(-?\\d{2})*)\\Z\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅正则表达式演示

\n\n

请注意,从 Python 3.6 开始,您甚至会遇到异常:

\n\n
re.error: bad escape \\z at position 68\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅Pythonre文档

\n\n
\n

版本 3.6 中进行了更改:由\'\\\'和 ASCII 字母组成的未知转义现在是错误。

\n
\n