用Python中的约束验证正则表达式US邮政编码

用Python中的约束验证正则表达式US邮政编码,python,regex,Python,Regex,我正试图编写一个遵循以下约束的正则表达式: 正好是5位数 有时,但不总是,后面跟着一个多4位数的破折号 邮政编码前面必须至少有一个空格 不能位于文本的开头 我已经做到了这一点,但它没有给我想要的输出: r"^[A-Za-z].*\s.*\d{5}(?:[-\s]\d{4})?$" 我将使用: (?<=[ \t])((?:\d{5}(?=[^\d-]|$))|(?:\d{5}-\d{4}(?=[^\d-]|$))) (?你能提供你的输入和预期的输出吗?我不确定你想

我正试图编写一个遵循以下约束的正则表达式:

  • 正好是5位数
  • 有时,但不总是,后面跟着一个多4位数的破折号
  • 邮政编码前面必须至少有一个空格
  • 不能位于文本的开头
我已经做到了这一点,但它没有给我想要的输出:

r"^[A-Za-z].*\s.*\d{5}(?:[-\s]\d{4})?$"
我将使用:

(?<=[ \t])((?:\d{5}(?=[^\d-]|$))|(?:\d{5}-\d{4}(?=[^\d-]|$)))

(?你能提供你的输入和预期的输出吗?我不确定你想用A-Za-z实现什么。你的要求中肯定没有提到这方面的任何内容。确保你真正理解正则表达式语言。为什么从
[A-Za-z]开始
?您看过了吗?一般来说,要解决正则表达式的故障,从正则表达式中取出一些内容,直到它开始匹配。然后逐渐添加一些内容。这样您就可以确切地知道应该关注什么问题。我的想法是[a-Za-z]这意味着邮政编码不能出现在句子的开头。是的,这在@dawg中起作用。整个前半部分我自己都不知道。谢谢!!