Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 - Fatal编程技术网

Java 正则表达式删除方括号内的逗号和空格

Java 正则表达式删除方括号内的逗号和空格,java,regex,Java,Regex,您好,我有一个文件如下所示: year.", [229, 338], null, [1144, 2371] year....", null, null, [812] year:, null, null, [1019, 1028, 2463] year;, null, [164], [1052] 这就是我想要的文件的样子 year.", 229:338, , 1144:2371 year....", , , 812 year:, , , 1019:1028:2463 year;, , 164,

您好,我有一个文件如下所示:

year.", [229, 338], null, [1144, 2371]
year....", null, null, [812]
year:, null, null, [1019, 1028, 2463]
year;, null, [164], [1052]
这就是我想要的文件的样子

year.", 229:338, , 1144:2371
year....", , , 812
year:, , , 1019:1028:2463
year;, , 164, 1052

我尝试过
.replaceAll(“,[?=[^()]*\\]]”,“:”),但这只是替换了所有逗号,而不是括号内的逗号。

看起来您想要这样做

  • 删除所有
    null
    s
  • 编号、编号、编号
    替换为
    编号:编号
    ,换句话说,将前面有数字的每个
    替换为
  • 删除
    [
    ]
演示:

字符串输入=
“year.\”,[229338],null,[11442371]\r\n“+
“年…”,空,空,[812]\r\n“+
“年份:,null,null,[101910282463]\r\n”+
“年份;空,[164],[1052]”;
应为字符串=
“year.\”,229:3381144:2371\r\n“+
“年份…”,812\r\n“+
“年份:,,1019:1028:2463\r\n”+
“年份;,164,1052”;
input=input.replace(“null”和“”)

.replaceAll((?看起来您想

  • 删除所有
    null
    s
  • 编号、编号、编号
    替换为
    编号:编号
    ,换句话说,将前面有数字的每个
    替换为
  • 删除
    [
    ]
演示:

字符串输入=
“year.\”,[229338],null,[11442371]\r\n“+
“年…”,空,空,[812]\r\n“+
“年份:,null,null,[101910282463]\r\n”+
“年份;空,[164],[1052]”;
应为字符串=
“year.\”,229:3381144:2371\r\n“+
“年份…”,812\r\n“+
“年份:,,1019:1028:2463\r\n”+
“年份;,164,1052”;
input=input.replace(“null”和“”)

.replaceAll(”(?要简化,它应该是一个数字,后跟一个需要替换的逗号吗?很好的观察。括号内的值始终是数字。要简化,它应该是一个数字,后跟一个需要替换的逗号吗?很好的观察。括号内的值始终是数字。最后一个,因为我们匹配的是单个字符f或者当然,字符集更方便:
“[]]”
。这样它就可以匹配任何一个括号。@hustmphrr
[]]
并不意味着你认为它是什么。你的正则表达式代表两个空字符类/集。
]
是字符类中的特殊字符,代表它的结束。我们需要转义每个
[
]
在character类中,如果我们想让它们表示文字,那么在我的版本中,我甚至不需要转义
]
因为没有正确打开的字符集/类,所以它不能表示字符集/类的结尾,但为了清晰起见,我喜欢将其转义。不,你是百分之五十对的。在字符集中,如果
]
出现在
[
之后,则表示字符本身,而不必转义。与
[
。如果它出现在字符集中,则表示字符本身。在您的版本中,如果您没有转义,则给出了错误的字符。它将仅匹配管道字符。确定。这意味着java re引擎不完全符合pcre。很高兴了解一些详细信息。最后一个,因为我们确实匹配单个字符,字符集更方便:
“[]]]”
。这样它就可以匹配任何一个括号。@hustmphrr
[]]
并不是你所想的那样。你的正则表达式代表两个空字符类/集。
]
是字符类中的特殊字符,代表它的结尾。我们需要转义
[
]
在字符类中,如果我们想让它们表示文字。在我的版本中,我甚至不需要转义
]
,因为它不能表示字符集/类的结尾,因为没有正确打开的字符集/类,但为了清晰起见,我喜欢转义。不,你是对的。在字符集中,如果
]
[
之后立即出现,表示字符本身,无需转义。与
[
。如果它出现在字符集中,则表示字符本身。在您的版本中,如果您没有转义,则给出了错误的字符。它将仅与管道字符匹配。确定。这意味着java re引擎不完全符合pcre。很高兴了解一些详细信息。
String input = 
        "year.\", [229, 338], null, [1144, 2371]\r\n" + 
        "year....\", null, null, [812]\r\n" + 
        "year:, null, null, [1019, 1028, 2463]\r\n" + 
        "year;, null, [164], [1052]";

String expected = 
        "year.\", 229:338, , 1144:2371\r\n" + 
        "year....\", , , 812\r\n" + 
        "year:, , , 1019:1028:2463\r\n" + 
        "year;, , 164, 1052";

input = input.replace("null", "")
             .replaceAll("(?<=\\d), ", ":")
             .replaceAll("\\[|\\]", "");

System.out.println(input.equals(expected));