我想用正则表达式在java中拆分字符串
以下是我从文件中读取的内容: (25)“如果”“急救测试()\”((286 13))() 我想把这根绳子分成两段我想用正则表达式在java中拆分字符串,java,regex,replace,split,str-replace,Java,Regex,Replace,Split,Str Replace,以下是我从文件中读取的内容: (25)“如果”“急救测试()\”((286 13))() 我想把这根绳子分成两段 25 If "First aid.test()" 286 13 如何使用正则表达式拆分此字符串?请编辑您的最新评论: 这并不漂亮,但它将成功分割您的字符串,如您在评论中所述: String input = "(25 \"If\" \"\\\"First aid.test()\\\"\" ((286 13)) ()"; input = input.replaceAll("(?<
25 If "First aid.test()" 286 13
如何使用正则表达式拆分此字符串?请编辑您的最新评论: 这并不漂亮,但它将成功分割您的字符串,如您在评论中所述:
String input = "(25 \"If\" \"\\\"First aid.test()\\\"\" ((286 13)) ()";
input = input.replaceAll("(?<!\\\\)\"|\\\\", "");
input = input.replaceAll("[)](?!\\\")|[(](?![)]\")", "");
input = input.replaceAll("(\".*?\")| ", "_$1");
String[] result = input.split("_+");
String input=“(25\”如果\“\\”急救测试()\\\”((286 13))”;
input=input.replaceAll(“(?)?
- 第一次替换:删除所有“不在前面的”\然后删除所有\
- 第二次更换:拆下所有相关(和)
- 第三次替换:将引号或空格之间匹配的所有内容替换为_match
- 分开_
这将导致
[25,如果“急救测试()”,286,13]
它确实很难看,但对您的字符串有效。拆分字符串无法生成不是原始字符串一部分的子字符串,例如,…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);
}
publicstaticvoidmain(字符串参数[]){
字符串test=“(25\”如果\“\\”急救。test()\\”((286 13))”;
Pattern extract=Pattern.compile(“[^(\”)+(\”(\”(\”)*”);
匹配器匹配=extract.Matcher(测试);
List tokens=new ArrayList();
while(match.find()){
字符串标记=match.group(0);
if(匹配组(1)!=null){
//FY:考虑使用Apache StrugEnviutILLS。
token=token.substring(1,token.length()-1);
令牌=令牌。替换(“\\\”,“\”);
}
令牌。添加(令牌);
}
System.out.println(代币);
}
输出:
[25,如果“急救测试()”,286,13]
我没有看到任何拆分。您只是删除了一些字符。regex用于用pattern来标识它。我认为您只需要将一些字符替换为空格
我希望结果显示为数组,如[25,If,“First-aid.test()”,286,13]@slivia请记住在您的问题得到回答时接受最佳答案。@slivia我已根据您更新的要求更新了我的答案,以列表格式打印。非常感谢。这就是我想要的want@slivia是当有人回答你的问题时该做什么。要将答案标记为已接受,请单击答案旁边的复选标记o将其从灰显切换为填写。不需要在您的问题或答案上添加注释来表示“谢谢”。有很多情况下,这会失败。例如,“If\\\”
或“test(wow(ok))”
是的,这是一个非常糟糕的解决方案,但我们对输入不太了解。您得到了我的投票