仅伦敦邮政编码的正则表达式

Posted

技术标签:

【中文标题】仅伦敦邮政编码的正则表达式【英文标题】:Regular expression for London only postcodes 【发布时间】:2014-11-30 17:42:52 【问题描述】:

伦敦是一个很好的起点,但如果您了解英国郡(如萨里)的正则表达式或正则表达式,我们将不胜感激。基本上我正在创建一个网络爬虫,但我检索的信息只给出了伦敦街道名称、自治市镇和邮政编码。它没有说伦敦。

这是一个提供伦敦邮政编码的网站@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。​​p>

我使用的语言是 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());
        
    

【问题讨论】:

Reguar Expression, UK Post Code, Slight Amendment?的可能重复 为什么您在 *** 中搜索 UK Post Codes 时返回的问题都没有满足您的要求?您尝试了什么?您尝试的解决方案有什么问题? Ron UK 邮政编码很简单。我需要一个可以为我创建伦敦邮政编码正则表达式的正则表达式天才 为什么您不能只搜索与适用于伦敦的特定前缀匹配的任何内容?将子字符串识别为邮政编码后,只需查看前 2-4 个字符,看看它们是否与列表中的某些内容匹配。 顺便说一句,否决票是由于您的帖子中完全没有尝试解决方案,以及您遇到的问题的声明。这不是代码编写服务。 【参考方案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!");
    

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

我认为您提出的解决方案无法满足您的需求(很抱歉我的网站让您误入歧途!)。并非伦敦外围行政区的所有邮政编码都在伦敦范围内。例如,KT1 是金士顿,属于大伦敦的一部分,KT24 是萨里的东霍斯利,绝对不是伦敦的一部分。您最好的选择是从 ONS/Ordnance Survey/我的网站下载完整的邮政编码数据集,然后提取位于伦敦自治市镇或已建成区设置为大伦敦的邮政编码(我不确定这些是否相同,但我猜他们是)。

【讨论】:

【参考方案4】:

这就是我想要的答案。

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

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());
        
    

【讨论】:

以上是关于仅伦敦邮政编码的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式冲突电话号码和邮政编码

Redshift 正则表达式错误?

使用正则表达式分组结构匹配部分字符串

邮政编码的正则表达式

英国邮政编码正则表达式验证

文字 编码 正则表达式 切换