新安江镇保健路6号,对地址进行匹配,最终我想得到 新江镇,保健路,6号正则表达式我基本上不懂,有没有人能给一个能用的,稍稍解释一下?
".*?[^|路|巷|道|街|镇|乡|县|区|市](.*)([路|巷|道|街|镇|乡|县|区|市]).*",
"([1-9][\\.0-9]*)|([1-9][\\.0-9-]*)(号)
".*?[^|路|巷|道|街|镇|乡|县|区|市](.*)([路|巷|道|街|镇|乡|县|区|市]).*",
"([1-9][\\.0-9]*)|([1-9][\\.0-9-]*)(号)
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
这个得到 湖墅南路,草营巷,31-32号
例子2:新安江镇保健路6号
这个得到 新安江镇,保健路,6号也就是有两种情况,一种是除了号这种地址之外,要得到 XX路或是XX镇
第2种是XX号这种情况,有X号,如6号,还有31-32号这样的,还有1-2-543号,这样的,可以帮着再看一下吗?
String str = "新安江镇保健路6号";
System.out.println(str.replaceAll("(.*镇)(.*路)(.*号)","$1,$2,$3"));
我又做了些改进 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
String str = "新安江镇保健路6号";
System.out.println(str.replaceAll("(.*[镇,路])(.*[路,巷])(.*号)","$1,$2,$3"));
str = "湖墅南路草营巷31-32号";
System.out.println(str.replaceAll("(.*[镇,路])(.*[路,巷])(.*号)","$1,$2,$3"));
addr = addr.replaceAll("(?<=镇)|(?<=路)",",");
System.out.println(addr);
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
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));
}
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号]
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"));