我有一个地址列表,包括邮政编码(英国邮政编码版本)
我想只查看邮政编码值以N
或NW
开头的行,如下所示:
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
答案 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}
- 两个大写字母$
- 字符串这应符合列出的所有英国邮政编码。
您可能需要修改其他英国邮政编码。