簡體   English   中英

根據正則表達式拆分字符串

[英]Split a String based on regex

我有一個字符串需要根據“,”(逗號)的出現進行拆分,但需要忽略一對括號中出現的任何字符串。 例如, 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(/\([^)]*\)|[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";
Pattern p = Pattern.compile("\\([^)]*\\)|[A-Z\\d]+");
Matcher m = p.matcher(str);
List<String> matches = new ArrayList<String>();
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個任何字母數字字符(包括下划線),並為逗號做好積極展望

  • (?<=,)\\(\\w{3},\\w{3}\\)(?=,) - 匹配這種模式(ABC,E4R) ,並做一個積極的前瞻,並留意逗號

  • (?<=,)\\w{3} - 匹配3個任何字母數字字符(包括下划線)並為逗號做正面看法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM