拆分任意数量的逗号和空格的字符串

问题描述:

我有一个字符串,我试图把它变成一个列表,但是我得到了空的条目。拆分任意数量的逗号和空格的字符串

",A,B,C,D, ,,," 
returns 
[, A, B, C, D, , , ,] 

我想删除所有 “空” 逗号:

[A, B, C, D] 

我想

current.split(",+\\s?") 

不产生我想要的结果。我应该用什么正则表达式?

+0

什么语言是您使用? – Bergi 2013-03-07 20:25:59

+0

@Bergi它的Java。应该如此吗?我正在寻求与正则表达式的帮助。 – Aboutblank 2013-03-07 20:26:43

+3

是的,因为不同的语言使用不同的正则表达式风格,具有不同的功能和语法 – Bergi 2013-03-07 20:30:27

需要两个步骤,但只有一条线:

String[] values = input.replaceAll("^[,\\s]+", "").split("[,\\s]+"); 

的调用replaceAll()删除前导分隔符。
拆分是在任意数量的分隔符上完成的。

split()的行为意味着忽略尾随空白值,因此无需在分割之前修剪尾随分隔符。

这是一个测试:

public static void main(String[] args) throws Exception { 
    String input = ",A,B,C,D, ,,,"; 
    String[] values = input.replaceAll("^[,\\s]+", "").split("[,\\s]+"); 
    System.out.println(Arrays.toString(values)); 
} 

输出:

[A, B, C, D] 

你不仅要包括未来几年的空格到你的比赛,也是连续commata对它们分割成一个单元:

(,\s*)+ 
current.split("(?:,\\s*)+") 

我会用Splitter in Guava此:

Splitter.on(',').omitEmptyStrings().trimResults().split(",A,B,C,D, ,,,"); 

因为我觉得比正则表达式更容易阅读。

匹配任何字符其他不是逗号和空格很可能是一个清洁的解决方案:

/[^, ]+/g

",A,B,C,D, ,,,".match(/[^, ]+/g) 
// → ["A", "B", "C", "D"] 

如果你在Javascript中的工作,你也可以使用Lodash _.words方法(荣誉对他们为上述正则表达式):

https://lodash.com/docs#words

_.words('fred, barney, & pebbles', /[^, ]+/g); 
// → ['fred', 'barney', '&', 'pebbles']