繁体   English   中英

Java正则表达式拆分文本(分隔符和顺序可能都是未知的)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM