大写字母的 .NET Regex 负前瞻

.NET Regex Negative Lookahead For Upper Case Letters

正在尝试为自定义 .NET 应用程序构建表达式以从地址中提取邮政编码。

地址在一行中

12345 Example Street, NY 10019 United States

使用了以下表达式

\d{3,5}-\d{3,5}|\d{5}(?![A-Z]{2})

但这似乎同时获取了 12345 和邮政编码 10019。考虑到我在否定前瞻中只提到了 2 个大写字母,难道不应该只考虑前面有 2 个字母的 NY 代码的邮政编码吗?我在这里做错了什么?

我正在使用 | 运算符,因为邮政编码采用 12345-12345 以及 12345 格式

请检查我正在测试的正则表达式here

您可以在这里使用回顾:

\d{3,5}-\d{3,5}|(?<=[A-Z]{2}\s+)\d{5}

regex demo

(?<=[A-Z]{2}\s+) 需要 2 个大写字母,然后在 5 位数字前有 1 个或多个空格。

为确保匹配指定的位数,您可以使用字边界 \b:

\b(?:\d{3,5}-\d{3,5}|(?<=[A-Z]{2}\s+)\d{5})\b

参见 another demo