我有一个下面的正则表达式,
/\A(\d{5}[A-Z]{2}[a-zA-Z0-9]{3,7}-TMP|\d{5}[A-Z]{2}\d{3,7}(\-?\d{2})*)\z/
我正在检查以下字符串。第一个和第三个应该返回我猜到的匹配,第二个不匹配。但是我没有在所有3个上都匹配。我的正则表达式错了吗?
99844RI1800001
99806CAAUSJ-TMP1
99844RI1800002
答案 0 :(得分:2)
Python re
不支持\z
,它支持\Z
作为与字符串末尾匹配的等效模式。您的模式要求在模式末尾有文字z
char。
请参见Rexegg.com参考:
✽在Python中,标记
\Z
的作用与\z
在其他引擎中的作用相同:它仅在字符串的末尾匹配。
因此您可以使用
\A(\d{5}[A-Z]{2}[a-zA-Z0-9]{3,7}-TMP|\d{5}[A-Z]{2}\d{3,7}(-?\d{2})*)\Z
请参见regex demo
请注意,从Python 3.6开始,您甚至会得到一个例外:
re.error: bad escape \z at position 68
请参见Python re
docs:
版本3.6中的更改:由
'\'
和ASCII字母组成的未知转义符现在是错误。