仅限伦敦的正则表达式

时间:2014-11-30 17:42:52

标签: java regex postal-code

伦敦是一个很好的起点,但如果你了解像萨里这样的英国郡的正则表达式或正则表达式,那将非常感激。基本上我正在创建一个网络爬虫,但我正在检索的信息只提供伦敦街道名称,自治市镇和邮政编码。它没有说伦敦。

这是一个提供伦敦邮政编码@droogal

的网站

是否有涵盖伦敦邮政编码的正则表达式库。如果你需要写它,邮政编码的第一部分会给出位置,即伦敦。

有:

  

WC,EC,E1-E20,N1-N22,NW1-NW11,SE1-SE28,SW1-SW20,W1-14    和大伦敦...... BR,CR,DA,EN,HA,IG,KT,RM,SM,TW,UB,WD。

我使用的语言是Java,但是说大多数语言都有正则表达式!

这是我到目前为止所得到的。如何在正则表达式中编号?

public static void main(String[] args) throws IOException {

    String postcode = "WD";
     Pattern regex = Pattern.compile("^(WC|EC|BR|CR|DA|EN|HA|IG|KT|RM|SM|TW|UB|WD)");
    Matcher finder = regex.matcher(postcode);
    if (finder.find()) {
        try {
            String value = finder.group(0);
            System.out.println("This is London");
        } catch (NumberFormatException e) {
            System.out.println(e.getMessage());
        }
    }
}

4 个答案:

答案 0 :(得分:1)

我对正则表达式感到困惑:

private static final List LONDON_CODES = Arrays.asList("WC","EC","BR","CR","DA","EN","HA","IG","KT","RM","SM","TW","UB","WD");

public static void main(String ... a) {
    if(LONDON_CODES.contains("WD")) {
        System.out.println("This is London!");
    } else {
        System.out.println("This is country!");
    }
}

答案 1 :(得分:1)

假设您有一个邮政编码,这与伦敦邮政编码匹配:

boolean isLondon = postcode.matches(".*(WC|EC|BR|CR|DA|EN|HA|IG|KT|RM|SM|TW|UB|WD).*");

需要注意的一点是,传递给String.matches()的正则表达式必须与整个字符串匹配才能返回true。

答案 2 :(得分:0)

这是我想要的答案。

以下正则表达式与任何英国邮政编码的第一部分相匹配,以确定它是否为伦敦邮政编码。显然这是我对正则表达式的第一次尝试,但我已经测试过每个行政区

public static void main(String[] args) throws IOException {

    String postcode = "BR1 1AA";

 //Revised
     Pattern regex = Pattern.compile("(WC|EC|BR|CR|DA|EN|HA|IG|KT|RM|SM|TW|UB|WD|(E[1-9]|E1[1-9]|E20)"
                                    + "|(N[1-9]|N1[1-9]|N2[0-2])|(NW[1-9]|NW1[0-1])"
                                    + "|(SE[1-9]|SE1[1-9]|SE2[0-8])|(W[1-9]|W1[1-4])"
                                    + "|(SW[1-9]|SW1[1-9]|SW20))");
    Matcher finder = regex.matcher(postcode);
    if (finder.find()) {
        try {
            String value = finder.group(0);
            System.out.println("This is London");
        } catch (NumberFormatException e) {
            System.out.println(e.getMessage());
        }
    }
}

答案 3 :(得分:0)

我认为你提出的解决方案不会给你你想要的东西(道歉,我的网站让你误入歧途!)。并非所有伦敦外围区域的邮政编码都在伦敦境内。例如KT1是Kingston,它是大伦敦的一部分,KT24是Surrey的East Horsley,绝对不是伦敦的一部分。您最好的选择是从ONS / Ordnance Survey /我的网站下载完整的邮政编码数据集,并取出伦敦自治市镇的邮政编码或将建成区域设置为大伦敦(我不确定这些是否是等价,但我猜他们是。)