在Java中,如何拆分字符串而不使用括号中的分隔符?
我想用逗号分割字符串,但我想忽略括号之间的逗号 例如:在Java中,如何拆分字符串而不使用括号中的分隔符?,java,regex,split,Java,Regex,Split,我想用逗号分割字符串,但我想忽略括号之间的逗号 例如: Input: a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6 Output: a1:b1 a2:b2 [a3:b3-c3, b4, b5] a4:b6 提前感谢您的帮助。为了精确起见,您必须逐个字符进行解析,否则您可以进行如下操作: (伪代码) 注意:在步骤1中,您不需要手动替换占位符,而是使用正则表达式(例如/[[^]]+]/)将括号替换为占位符(并存储它们),然后在步骤3中重新替换 例如: 输入: a
Input:
a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6
Output:
a1:b1
a2:b2
[a3:b3-c3, b4, b5]
a4:b6
提前感谢您的帮助。为了精确起见,您必须逐个字符进行解析,否则您可以进行如下操作: (伪代码) 注意:在步骤1中,您不需要手动替换占位符,而是使用正则表达式(例如
/[[^]]+]/
)将括号替换为占位符(并存储它们),然后在步骤3中重新替换
例如:
输入:
a1:b1,a2:b2,[a3:b3-c3,b4,b5],a4:b6
步骤1:中间输出:
a1:b1、a2:b2、1、a4:b6
步骤2:中间输出:
a1:b1
a2:b2
__占位符1_
a4:b6
步骤3:输出:
a1:b1
a2:b2
[a3:b3-c3、b4、b5]
a4:b6
实际上,您在这里所做的是分层的拆分和替换,因为没有正则表达式可以匹配上下文敏感(因为没有正则表达式可以计算偏执)。您可以使用此正则表达式
,(?![^\[]*])
:
它将忽略方括号内的所有逗号
:
输出:
[a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6]
你的意思是替换括号内的逗号,对3@keyser不,用一个不同的占位符替换整个括号(包括括号内的逗号),然后用剩余的逗号拆分,然后用原始值替换占位符。好的,“替换所有括号”仍然有点误导。也许是“中间”或“内部”或其他什么。让我困惑的部分还在那里though@Delibz你好像掉进了和我一样的陷阱。Nikos的意思是,你应该用占位符替换括号内的所有内容,例如
&
,然后用逗号分割整个字符串,然后切换回&
。实际上,它依赖于一个否定的前瞻,断言不可能匹配一个非的字符[
直到第一个]
。请参阅。注意:稍后,如果您有不同的分隔符,可以用其他分隔符替换[
和]
。
String str="a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6";
System.out.println(Arrays.toString(str.split(",(?![^\\[]*\\])")));
import java.util.Arrays;
public class HelloWorld{
public static void main(String []args){
String str="a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6";
System.out.println(Arrays.toString(str.split(",(?![^\\[]*\\])")));
}
}
[a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6]