Java利用正则表达式实现省市镇识别,省市镇顺序打乱
时间: 2023-07-07 18:07:23 浏览: 120
可以通过正则表达式的分组和反向引用实现省市镇识别,顺序可以打乱。以下是一个简单的示例:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo {
public static void main(String[] args) {
String input = "四川省成都市高新区";
String patternStr = "(省|自治区|特别行政区)?([\\u4e00-\\u9fa5]+市)?([\\u4e00-\\u9fa5]+区|县|市)?([\\u4e00-\\u9fa5]+[街道|镇|乡])?";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String province = matcher.group(1);
String city = matcher.group(2);
String district = matcher.group(3);
String town = matcher.group(4);
System.out.println(province + city + district + town);
}
}
}
```
以上代码通过正则表达式 `"(省|自治区|特别行政区)?([\\u4e00-\\u9fa5]+市)?([\\u4e00-\\u9fa5]+区|县|市)?([\\u4e00-\\u9fa5]+[街道|镇|乡])?"` 匹配输入字符串中的省、市、区县和乡镇信息,并使用分组将它们提取出来。其中,`[\\u4e00-\\u9fa5]` 表示匹配中文字符,`?` 表示匹配零次或一次,`+` 表示匹配一次或多次,`|` 表示或,`()` 表示分组。在循环中,我们可以依次获取省、市、区县和乡镇信息,并打印出来。
如果输入字符串中的省市镇顺序打乱,也可以通过正则表达式进行识别。例如,以下代码可以识别出 `input` 中的乡镇、区县、市和省,无论它们的顺序如何:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo {
public static void main(String[] args) {
String input = "高新区四川省成都市";
String patternStr = "(省|自治区|特别行政区)?([\\u4e00-\\u9fa5]+市)?([\\u4e00-\\u9fa5]+区|县|市)?([\\u4e00-\\u9fa5]+[街道|镇|乡])?";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(input);
String[] result = new String[4];
while (matcher.find()) {
String province = matcher.group(1);
if (province != null) {
result[3] = province;
}
String city = matcher.group(2);
if (city != null) {
result[2] = city;
}
String district = matcher.group(3);
if (district != null) {
result[1] = district;
}
String town = matcher.group(4);
if (town != null) {
result[0] = town;
}
}
for (String s : result) {
System.out.print(s);
}
}
}
```
以上代码通过在循环中判断匹配到的字符串属于哪个分组,并将其存入一个数组中。最后,我们可以按照乡镇、区县、市和省的顺序输出它们。
阅读全文