java正则表达式,仅当不在引号或括号中时才以逗号分隔

标签 java regex

我想通过正则表达式进行 java 拆分。 当它不在单引号或方括号中时,我想在每个逗号上拆分我的字符串。 示例:

Hello, 'my,',friend,(how ,are, you),(,)


 should give:
    hello
    my,
    friend
    how, are, you
    ,

我试过这个:

(?i),(?=([^\'|\(]*\'|\([^\'|\(]*\'|\()*[^\'|\)]*$)

但我无法让它工作(我通过 http://java-regex-tester.appspot.com/ 测试)

有什么想法吗?

最佳答案

嵌套的括号不能被正则表达式分割。手动拆分它们更容易。

public static List<String> split(String orig) {
    List<String> splitted = new ArrayList<String>();
    int nextingLevel = 0;
    StringBuilder result = new StringBuilder();
    for (char c : orig.toCharArray()) {
        if (c == ',' && nextingLevel == 0) {
            splitted.add(result.toString());
            result.setLength(0);// clean buffer
        } else {
            if (c == '(')
                nextingLevel++;
            if (c == ')')
                nextingLevel--;
            result.append(c);
        }
    }
    // Thanks PoeHah for pointing it out. This adds the last element to it.
    splitted.add(result.toString());
    return splitted;
}

希望这对您有所帮助。

关于java正则表达式,仅当不在引号或括号中时才以逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107771/

相关文章:

java - Android 明文

java - Spring security 未定义名为 'CustomAuthenticationProvider' 的 bean

java - 如何在Struts2中使用JSF数据表?

java - 未报告的异常异常;必须被捕获或宣布被抛出

Java 从字符串中删除除 x 以外的非数字字符

javascript - 如何替换正则表达式中的多个字符?

java - 将字段值插入数据库

regex - 电子邮件子域匹配的正则表达式

javascript - 在 grunt-contrib-copy 的 "process"选项中使用正则表达式不起作用

regex - 银行帐号的正则表达式?