新安江镇保健路6号,对地址进行匹配,最终我想得到 新江镇,保健路,6号正则表达式我基本上不懂,有没有人能给一个能用的,稍稍解释一下?
".*?[^|路|巷|道|街|镇|乡|县|区|市](.*)([路|巷|道|街|镇|乡|县|区|市]).*",
"([1-9][\\.0-9]*)|([1-9][\\.0-9-]*)(号)

解决方案 »

  1.   


    public static void main(String[] args) {
    Pattern p1 = Pattern.compile("(.*)镇(.*)路(.*)号");
    Matcher m = p1.matcher("新安江镇保健路6号的,bbb"); 
    while(m.find()){ 
    System.out.println(m.group(1));
    System.out.println(m.group(2));
    System.out.println(m.group(3));
    }说明:
    (.*)是捕获组的意思,这里共3个捕获组,java会把它们存起来
    m.group(2)是第二个捕获组的值结果:
    新安江
    保健
    6
      

  2.   

    天哪,看来我描述的也太不清楚了例子1:湖墅南路草营巷31-32号
    这个得到 湖墅南路,草营巷,31-32号
    例子2:新安江镇保健路6号
    这个得到 新安江镇,保健路,6号也就是有两种情况,一种是除了号这种地址之外,要得到 XX路或是XX镇
    第2种是XX号这种情况,有X号,如6号,还有31-32号这样的,还有1-2-543号,这样的,可以帮着再看一下吗?
      

  3.   


    String str = "新安江镇保健路6号";
    System.out.println(str.replaceAll("(.*镇)(.*路)(.*号)","$1,$2,$3"));
      

  4.   

    上面用的是“贪婪”式的正则,用“懒惰式”的应该好些
    我又做了些改进 public static void main(String[] args) {
    Pattern p1 = Pattern.compile("地址:(.*?)镇(.*?)路(.*?)号");
    Matcher m = p1.matcher("地址:新安江镇保健路6号的,bbb"); 
    while(m.find()){ 
    System.out.println(m.group(1)+"镇");
    System.out.println(m.group(2)+"路");
    System.out.println(m.group(3)+"号");
    //也可以用下面的循环
    // for(int i=1;i<m.groupCount()+1;i++){
    // System.out.println(m.group(i));
    // }
    }
    更多的例子请看我以前发的提问帖
    http://topic.csdn.net/u/20090901/21/717a0aef-e8ea-4d2a-b94f-875ea4fc65f2.html
      

  5.   


    String str = "新安江镇保健路6号";
    System.out.println(str.replaceAll("(.*[镇,路])(.*[路,巷])(.*号)","$1,$2,$3"));
    str = "湖墅南路草营巷31-32号";
    System.out.println(str.replaceAll("(.*[镇,路])(.*[路,巷])(.*号)","$1,$2,$3"));
      

  6.   

    String addr = "新安江镇保健路6号";
    addr = addr.replaceAll("(?<=镇)|(?<=路)",",");
    System.out.println(addr);
      

  7.   

    这样改: public static void main(String[] args) {
    Pattern p1 = Pattern.compile("地址:(.*?)(?:路|镇)(.*?)(?:巷|路)(.*?)号");
    Matcher m = p1.matcher("地址:湖墅南路草营巷31-32号,bbb"); 
    // Matcher m = p1.matcher("地址:新安江镇保健路6号,bbb"); 
    while(m.find()){ 
    System.out.println(m.group(1));
    System.out.println(m.group(2));
    System.out.println(m.group(3));
    //也可以用下面的循环
    // for(int i=1;i<m.groupCount()+1;i++){
    // System.out.println(m.group(i));
    // }
    }结果:
    湖墅南
    草营
    31-32

    新安江
    保健
    6
      

  8.   

        Pattern p1 = Pattern.compile("(.*?镇)(.*?路)(.*?号)");
            Matcher m = p1.matcher("新安江镇保健路6号的,bbb"); 
            if(m.find()){ 
                System.out.println(m.group(1));
                System.out.println(m.group(2));
                System.out.println(m.group(3));
            }
      

  9.   


    public static void main(String[] args) {
    String[] strs = {"湖墅南路草营巷31-32号", "新安江镇保健路6号","北京市海淀区233号"};
    String[] result=null;
    for (String str : strs) {
    result=str.split("(?<=(路|巷|道|街|镇|乡|县|区|市|号))");
    System.out.println(Arrays.toString(result));
    }
    }结果:
    [湖墅南路, 草营巷, 31-32号]
    [新安江镇, 保健路, 6号]
    [北京市, 海淀区, 233号]
      

  10.   

    优化一下String str = "新安江镇保健路6号"; 
    System.out.println(str.replaceAll("(.*[\u9547\u8DEF])(.*[\u8DEF\u5DF7])(\\d*\u53F7)","$1,$2,$3")); 
    str = "湖墅南路草营巷31-32号"; 
    System.out.println(str.replaceAll("(.*[\u9547\u8DEF])(.*[\u8DEF\u5DF7])(\\d+(-\\d+)*\u53F7)","$1,$2,$3"));