正则表达式查询仅在部分匹配查询时拾取“8 5”

时间:2016-03-01 22:22:25

标签: regex

我有一个地址列表,包括邮政编码(英国邮政编码版本)

我想只查看邮政编码值以NNW开头的行,如下所示:

London, N2 5RW London, NW8 5RW London, N1 2HJ London, N38HG London, NW88FK

但有时数据会写为Street, London, England, N2 8GF,因此我无法过滤London, N

要捕获上面列表中的数据,我构建了以下正则表达式/\s[N]\w|\d\s|\d/ig

但它也捕获了London, W8 5RW任何想法为什么? (它似乎捕获了8 5部分。

更新

我在这里制作了我的正则表达式的共享版本:http://regexr.com/3ctpk

2 个答案:

答案 0 :(得分:2)

至于为何错误匹配,你告诉它要做三种不同类型的捕获:

\s[N]\w # [1] Match a single whitespace character (space, tab, etc...), 
        # the character "N", and any single letter or digit or underscore
|       # OR
\d\s    # [2] Match a single digit and whitespace character.
|       # OR
\d      # [3] Match a single digit

条件|导致您出现问题。在伦敦W8 5RW的情况下,它与[1]不匹配,但匹配[2] "8 "然后[3] "5"

Regexr有一些很棒的功能可以帮到你。一个是匹配中实际突出显示的块,显示两个单独的匹配:W [8] [5] RW。另一个是页面底部的“解释”标签,基本上说明了我上面所做的事情(在我写完之前我已经看过了,我可以节省一些时间。)

如果您想测试以N或NW开头的任何有效英国邮政编码,请使用以下模式(适用于RE2):

\s+NW?\d{1,2}\s*\d[A-Z]{2}

我会让你放入Regexr获取解释。 :)

答案 1 :(得分:1)

尝试N[W]?\d\s?\d[A-Z]{2}$分解为......

  • N - 以字母' N'
  • 开头
  • [W]? - 可选字母' W'
  • \d - 数字#1
  • \s? - 可选的空白字符
  • \d - 数字#2
  • [A-Z]{2} - 两个大写字母
  • $ - 字符串
  • 的结尾

这应符合列出的所有英国邮政编码。

您可能需要修改其他英国邮政编码。