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(“,[?=[^()]*\\]]”,“:”),但这只是替换了所有逗号,而不是括号内的逗号。
看起来您想要这样做
- 删除所有
snull
- 将
替换为编号、编号、编号
,换句话说,将前面有数字的每个编号:编号
替换为,
:
- 删除
和[
]
字符串输入=
“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));