现在有一个字符串“中国china2009"我想把它拆成三个字符串,中国,china,2009用正则表达式
昨天得到的答案是:
import java.util.regex.*;
public class MyRegex2 {
public static void main(String[] args) {
String s="中国china2009";
/*
* 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
* [a-zA-Z]*:表示英文字母有0个或多个
* \\d*:表示数字有0个或多个
*/
Matcher m=Pattern.compile("([\u4e00-\u9fa5]*)([a-zA-Z]*)(\\d*)").matcher(s);
if(m.find()){
//第一对小括号表示第一组,第二对小括号表示第二组...
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
}
}
但是我现在希望对于"china中国2009”这种情况也可以得到三个字符串,中国,china,2009 正则表达式如何去写呢
昨天得到的答案是:
import java.util.regex.*;
public class MyRegex2 {
public static void main(String[] args) {
String s="中国china2009";
/*
* 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
* [a-zA-Z]*:表示英文字母有0个或多个
* \\d*:表示数字有0个或多个
*/
Matcher m=Pattern.compile("([\u4e00-\u9fa5]*)([a-zA-Z]*)(\\d*)").matcher(s);
if(m.find()){
//第一对小括号表示第一组,第二对小括号表示第二组...
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
}
}
但是我现在希望对于"china中国2009”这种情况也可以得到三个字符串,中国,china,2009 正则表达式如何去写呢
import java.util.regex.*;
public class MyRegex2 {
public static void main(String[] args) {
String s="china中国2009";
/*
* 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
* [a-zA-Z]*:表示英文字母有0个或多个
* \\d*:表示数字有0个或多个
*/
Matcher m=Pattern.compile("([a-zA-Z]*)([\u4e00-\u9fa5]*)(\\d*)").matcher(s);
if(m.find()){
//第一对小括号表示第一组,第二对小括号表示第二组...
System.out.println(m.group(2));
System.out.println(m.group(1));
System.out.println(m.group(3));
}
}
}
while(s.length() > 0){
char c = s.charAt(0);
Matcher m;
if (c >= '0' && c <= '9') {
m = Pattern.compile("([0-9]*)(.*)").matcher(s);
} else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
m = Pattern.compile("([a-zA-Z]*)(.*)").matcher(s);
} else {
m = Pattern.compile("([\u4e00-\u9fa5]*)(.*)").matcher(s);
}
if (m.find()) {
String substr = m.group(1);
System.out.println(substr);
s = s.substring(substr.length());
}
}
可以用循环直接处理,根据字符的范围从头到尾解析。
import java.util.regex.*;
public class MyRegex2 {
public static void main(String[] args) {
String s="china中国2009";
String[] arr=new String[3];
arr[0]="(\\w*)([\u4e00-\u9fa5]*)(\\d*)";
arr[1]="([\u4e00-\u9fa5]*)([a-zA-Z]*)(\\d*)";
arr[2]="(\\D*)(\\d*)";
for (String regex : arr) {
Matcher m=Pattern.compile(regex).matcher(s);
if(m.find()){
System.out.println(m.group(2));
}
}
}
}
String[] rs1="china中国2009".split(reg);
System.out.println("第一种情况");
for(String ss:rs)
{
System.out.println(ss);
}
System.out.println("第二种情况");
for(String ss:rs1)
{
System.out.println(ss);
}运行结果:
第一种情况
中国
china
2009
第二种情况
china
中国
2009