根据正则表达式拆分字符串

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

 B2B, (A2C,AMM), (BNC,1NF), (106,A01), AAA, AX3 

对于没有巢

 ,(?![^\(]*\)) 

FOR NESTED (括号内的括号)

 (? 

试试以下:

 var str = 'B2B,(A2C,AMM),(BNC,1NF),(106,A01),AAA,AX3'; console.log(str.match(/\([^)]*\)|[AZ\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"; Pattern p = Pattern.compile("\\([^)]*\\)|[AZ\\d]+"); Matcher m = p.matcher(str); List matches = new ArrayList(); while(m.find()){ matches.add(m.group()); } for (String val : matches) { System.out.println(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} 

说明:有三个部分用OR (|)分隔

  • \w{3}(?=,) - 匹配3个任何字母数字字符(包括下划线),并为逗号做好积极outlook

  • (?<=,)\(\w{3},\w{3}\)(?=,) - 匹配这种模式(ABC,E4R) ,也做一个积极的前瞻,并留意逗号

  • (?<=,)\w{3} - 匹配3个任何字母数字字符(包括下划线)并为逗号做正面看法