使用关键字分割字符串的正则表达式

时间:2017-04-09 10:20:52

标签: java regex

我一直试图在Java中构建一个模式,用逗号,双引号和单词分隔后面的字符串。

例如:

输入字符串:

String str = "\"java and c++\" and ruby , are languages";

我想要结果为:

["java and c++",
ruby,
are languages]

输入字符串:

String str =" \" java和c ++ \"和\"红宝石\"并且是语言&#34 ;;

我想要结果为:

["java and c++",
"ruby",
are languages]

输入字符串:

String str =" java和c ++,\" ruby​​ \"并且是语言&#34 ;;

我想要结果为:

[java and c++,
"ruby",
are languages]

我想要单一模式来实现所有结果。

提前致谢

2 个答案:

答案 0 :(得分:0)

你可以这样使用;

String str = "\"java and c++\" and ruby , are languages";
str = str.replaceAll("and(?=[^\"\"]*\")", "#");

List<String> result = new ArrayList<>();
for (String s : str.split("and|,")) {
    result.add(s.replaceAll("#", "and"));
}
System.out.println(result);

这个想法是:

  1. 将引号".. and .."替换为str.replaceAll("and(?=[^\"\"]*\")", "#")
  2. 之间的
  3. and, str.split("and|,")
  4. 分开
  5. #替换为and,然后结束。
  6. 这将打印:

    ["java and c++" ,  ruby ,  are languages]
    

答案 1 :(得分:0)

由于您希望按lookahead拆分并将其保留在结果中(默认情况下,分隔符不包含在结果中),您需要包含String str = "\"java and c++\" and ruby , are languages"; String quote = Pattern.quote("\"java and c++\""); String[] split = str.split("((?<=" + quote + ")|,)"); System.out.println(split.length); System.out.println(Arrays.toString(split)); ,并使用逗号作为秒分隔符,例如:

"java and c++"

这将匹配,并将其包含在结果中(作为前瞻的结果)它也会匹配NSLocalizedStringWithDefaultValue但不会将其包含在结果中。