我想用正则表达式在java中拆分字符串

时间:2017-01-13 05:33:19

标签: java regex replace split str-replace

以下是我从文件中读到的内容:

  

(25"如果"" \"急救。测试()\""((286 13))()

我希望将此字符串拆分为

25 If "First aid.test()" 286 13

如何使用正则表达式来分割这个字符串?

2 个答案:

答案 0 :(得分:1)

拆分字符串不能产生子串,该子串不是原始字符串的一部分,例如...test()"在原始字符串中显示为...test()\"。但是,您可以使用正则表达式查找相关标记,然后根据需要处理它们。

public static void main(String args[]){
    String test = "(25 \"If\" \"\\\"First aid.test()\\\"\" ((286 13)) ()";
    Pattern extract = Pattern.compile("[^(\" )]+|(\"(\\\\\\\\|\\\\\"|[^\"])*\")");
    Matcher match = extract.matcher(test);
    List<String> tokens = new ArrayList<>();
    while(match.find()) {
        String token = match.group(0);
        if(match.group(1) != null) {
// FYI: consider using Apache StringEscapeUtils.unescapeJava(token);
            token = token.substring(1, token.length()-1);
            token = token.replace("\\\"", "\"");
        }
        tokens.add(token);
    }
    System.out.println(tokens);
}

<强>输出:

  

[25,If,“First aid.test()”,286,13]

答案 1 :(得分:0)

编辑您的最新评论: 这不是很好,但它会成功地拆分你的评论中描述的字符串:

String input =  "(25 \"If\" \"\\\"First aid.test()\\\"\" ((286 13)) ()";
input = input.replaceAll("(?<!\\\\)\"|\\\\", "");
input = input.replaceAll("[)](?!\\\")|[(](?![)]\")", "");
input = input.replaceAll("(\".*?\")| ", "_$1");
String[] result = input.split("_+");
  • 首先替换:删除所有“不在\之前,然后删除所有\
  • 第二次替换:删除所有相关(和)https://regex101.com/r/K2LS1c/1
  • 第三次替换:使用_ 匹配
  • 替换引号或空格之间匹配的所有内容
  • 拆分_

这将导致

  

[25,If,“First aid.test()”,286,13]

这真的很丑,但它适用于你的字符串......