[英]Java regex split text (both the delimiter and the order may be unknown)
我试图分割一个文字,如"name:jack,berk,john;teacher:smith,jan;course:math;"
我希望结果包含3个子字符串(或更少,取决于'名称''老师''课程'的外观),这是:
"name:jack,berk,john;"
"teacher:smith,jan;"
"course:math;"
但标识符'teacher,name,course'
的出现顺序不固定,可以是'course ,name, teacher'
,也可以缺少一两个,就像只有'名称'标识符一样。
标识符之间的分隔符也不固定,例如';'
,也可以是'、\\\\s,'
。
我尝试了很多次但是没有用。
String str = "name:jack,berk,john;teacher:smith,jan;course:math;
str = str.replaceAll("(.*)(.)(name|teacher|course)(.*)(.)(name|teacher|course)(.*)", "$1--$3$4--$6$7");
System.out.println(str);
任何建议,将不胜感激。
编辑:正则表达式没有寻找特定的分隔符。
而不是拆分字符串在这个正则表达式上匹配:
(name|teacher|course):(.+?)(?=\W*(?:name|teacher|course|$))
码:
Pattern p = Pattern.compile("(name|teacher|course):(.+?)(?=\\W*(?:name|teacher|course|$))");
Matcher m = p.matcher(name:jack,berk,john;teacher:smith,jan;course:math;);
while (m.find()) {
System.out.println(m.group(1) + " :: " + m.group[2]);
}
public static void main(String[] args) {
String str = "name:jack,berk,john;teacher:smith,jan;course:math;";
String[] values = str.split(";");
for (String s : values) {
if (s.contains("name:")) {
System.out.println("name : " + s.replaceAll("name:", ""));
} else if (s.contains("teacher:")) {
System.out.println("teacher : " + s.replaceAll("teacher:", ""));
} else if (s.contains("course:")) {
System.out.println("course : " + s.replaceAll("course:", ""));
}
}
}
O / P:
name : jack,berk,john
teacher : smith,jan
course : math
您可以使用唯一分隔符替换所有分隔符 ,然后使用String.split
。
String input = "name:jack,berk,john;teacher:smith,jan-course:math;";
String uniqueDelimiter = ";";
String[] otherDelimiters = new String[2];
otherDelimiters[0] = "\\s";
otherDelimiters[1] = "-";
for (String delimiter : otherDelimiters) {
input = input.replaceAll(delimiter, uniqueDelimiter);
}
String[] keyList = input.split(uniqueDelimiter);
str.split("[、;,\\s](?=name|teacher|course|$)")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.