Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想用正则表达式在java中拆分字符串_Java_Regex_Replace_Split_Str Replace - Fatal编程技术网

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

我想用正则表达式在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)“如果”“急救测试()\”((286 13))()

我想把这根绳子分成两段

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))”
是的,这是一个非常糟糕的解决方案,但我们对输入不太了解。您得到了我的投票