大写字母的.NET正则表达式负面前瞻

时间:2017-04-07 09:27:33

标签: regex regex-lookarounds

尝试为自定义.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

1 个答案:

答案 0 :(得分:2)

你可以在这里使用lookbehind:

\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