Java 基于正则表达式拆分字符串

Java 基于正则表达式拆分字符串,java,regex,Java,Regex,我有一个字符串,需要根据“,”(逗号)的出现进行拆分,但需要忽略它在一对括号内的任何出现。 例如,B2B,(A2C,AMM),(BNC,1NF),(106,A01),AAA,AX3 应分为 B2B, (A2C,AMM), (BNC,1NF), (106,A01), AAA, AX3 请尝试以下内容: var str = 'B2B,(A2C,AMM),(BNC,1NF),(106,A01),AAA,AX3'; console.log(str.match(/\([^)]*\)|[A-Z\d]+/g

我有一个字符串,需要根据“,”(逗号)的出现进行拆分,但需要忽略它在一对括号内的任何出现。 例如,
B2B,(A2C,AMM),(BNC,1NF),(106,A01),AAA,AX3
应分为

B2B,
(A2C,AMM),
(BNC,1NF),
(106,A01),
AAA,
AX3
请尝试以下内容:

var str = 'B2B,(A2C,AMM),(BNC,1NF),(106,A01),AAA,AX3';
console.log(str.match(/\([^)]*\)|[A-Z\d]+/g));
// gives you ["B2B", "(A2C,AMM)", "(BNC,1NF)", "(106,A01)", "AAA", "AX3"]
Java版:

String str=“B2B,(A2C,AMM),(BNC,1NF),(106,A01),AAA,AX3”;
模式p=Pattern.compile(“\\([^)]*\\)|[A-Z\\d]+”;
匹配器m=p.Matcher(str);
列表匹配项=新的ArrayList();
while(m.find()){
匹配。添加(m.group());
}
for(字符串val:matches){
系统输出打印项次(val);
}

用于非嵌套的

,(?![^\(]*\))
用于嵌套的(括号内的括号)


(?一次简单的迭代可能比任何正则表达式都更好,尤其是如果数据可以在括号内包含括号。例如:

String data="Some,(data,(that),needs),to (be, splited) by, comma";
StringBuilder buffer=new StringBuilder();
int parenthesesCounter=0;
for (char c:data.toCharArray()){
    if (c=='(') parenthesesCounter++;
    if (c==')') parenthesesCounter--;
    if (c==',' && parenthesesCounter==0){
        //lets do something with this token inside buffer
        System.out.println(buffer);
        //now we need to clear buffer  
        buffer.delete(0, buffer.length());
    }
    else 
        buffer.append(c);
}
//lets not forget about part after last comma
System.out.println(buffer);
输出

Some
(data,(that),needs)
to (be, splited) by
 comma
试试这个

\w{3}(?=,)|(?<=,)\(\w{3},\w{3}\)(?=,)|(?<=,)\w{3}

\w{3}(?=,)|(?您是否需要在
B2B
之后使用逗号
?不。这只是为了演示它应该如何拆分。也许您可以检查csv解析器。这正是它们所做的,只是它们处理引号而不是括号。str.split(\([^)]*\[^,()+”;返回所有“,”字符串“B2B,((A2C,AMM),CCC)如何处理),(ABC,CBA,AAA)?你需要处理这样的事情吗(比如,平衡括号)?如果是这样的话,忘记正则表达式,这是不可能的(我的意思是不可能的,不仅仅是非常困难)。
\([^]*\)[^,()]+“
是另一种选择,它允许除大写字母和数字以外的更多字符。@user650654是的,这是真的。@Evgeni它是控制台而不是控制台。注意,在Java中使用String.split(…)将不会给出所需的结果。
Some
(data,(that),needs)
to (be, splited) by
 comma
\w{3}(?=,)|(?<=,)\(\w{3},\w{3}\)(?=,)|(?<=,)\w{3}