我可以将此“范围字符串”与正则表达式匹配吗?

时间:2015-11-11 04:56:47

标签: java regex

我正在尝试设置一个交付区域映射方法,该方法采用邮政编码(澳大利亚)并将其与一组交付区域进行匹配。

区域定义是一个文本块,如下所示:

4124-4125, 4133,4211,4270,4272,4275,4280,4285,4287,4307-4499,4510,4512,4515-4519,4522-4899

因此,有两种类型,个别邮政编码或一系列匹配的邮政编码。我已经实现了正则表达式来匹配单个项目(在java中):
String regex3 = ".*,?\\s?" +postcode + "\\s?,?.*";

但我想知道匹配范围记录的最佳方法是什么。例如,输入4308应与范围定义4307-4499匹配。我怀疑可能需要使用正则表达式解析所有范围定义,然后将输入与每个定义进行匹配。有谁能建议更快的方式?

1 个答案:

答案 0 :(得分:1)

此表达式将获取所有邮政编码

((\\d{4})(-\\d{4})?)+

所以它将匹配4343和4543-9987

修改

好吧,怎么样,看看这是否有意义

public static void main(String[] args) {

        String postalCodeString = "4124-4125, 4133,4211,4270,4272,4275,4280,4285,4287,4307-4499,4510,4512,4515-4519,4522-4899";

        int userInput = Integer.parseInt("4308");

        String [] postalArray = postalCodeString .split(",");

        for (String post : postalArray )
        {

            if(h.contains("-"))
            {
                String [] range = post.trim().split("-"); 
                int low = Integer.parseInt(range[0]);
                int high = Integer.parseInt(range[1]);

                if(userInput<=high && userInput>=low)
                    System.out.println("Found in range "+h);
            }
            else
            {
                int pcode = Integer.parseInt(post.trim());

                if(userInput==pcode)
                    System.out.println("Found in postal code "+pcode);
            }
        }


    }

打印出来

Found in range 4307-4499

这就是你要找的东西吗?