RegEx用于按空格分割字符串但忽略引号中的空格

时间:2014-07-15 10:17:44

标签: java regex string

我有一个字符串,

String string = "sdeLING9497896,\"kifssd9497777 999_13\",Kfsheis9497896e,ersdG9497896,aseLING9497896   erunk15426 \nEsea4521 
\"\nSdfes451 45264\" \"kiseliog949775 959_13\"";

我可能在此字符串中包含空格,逗号,制表符或换行符。我的要求是使用空格,逗号,制表符和换行来拆分此字符串,但应排除双引号字符串中的空格。

我的示例代码:

public class RegExTest {

    public static void main(String[] args) {
        Set<String> idSet = new HashSet<String>();
        String string = "sdeLING9497896,\"kipliog9497777 999_13\",KIPLING9497896e,ersdG9497896,aseLING9497896   erunk15426 \nEsea4521 \"\nSdfes451 45264\"";
        String ids[] = string.split(**"NEED A REGEX HERE"**);
        for (String id : ids) {
            if (id.trim().length() > 0) {
                idSet.add(id);
            }
        }
        System.out.println(idSet);
    }
}

我的期望是: sdeLING9497896, kifssd9497777 999_13, KIPLING9497896e, ersdG9497896, aseLING9497896, erunk15426, Esea4521, Sdfes451 45264, kiseliog949775 959_13

请指导我解决这个问题!

1 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式:

String[] tok = string.split("(?=((\\S*\\s){2})*\\S*$)[\\s,]+");

只有当\s超出双引号时才会在,\s上分开,确保在分隔符\s后有偶数引号。