以下是我从文件中读到的内容:
(25"如果"" \"急救。测试()\""((286 13))()
我希望将此字符串拆分为
25 If "First aid.test()" 286 13
如何使用正则表达式来分割这个字符串?
答案 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("_+");
这将导致
[25,If,“First aid.test()”,286,13]
这真的很丑,但它适用于你的字符串......