【问题标题】:The "\z" anchor not working in Python regex“\z”锚在 Python 正则表达式中不起作用
【发布时间】:2019-11-16 01:34:00
【问题描述】:

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

/\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

【问题讨论】:

  • Python re 不支持\z,它支持\Z 作为等效模式
  • if not <string>.endswith('-TMP1'): ?

标签: python regex


【解决方案1】:

Python re 不支持\z,它支持\Z 作为匹配字符串末尾的等效模式。您的模式需要文字 z 字符出现在模式的末尾。

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 字母组成的未知转义现在是错误。

【讨论】:

  • 谢谢..被困在这这么久:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多