19

我正在尝试拆分一个可以用逗号、空格或分号分隔的字符串。它还可以在每个定界符之后包含一个或多个空格。例如

22222,11111,23232 
OR
22222, 11111, 23232 
OR
22222;     11111; 23232
OR
22222 11111 23232 

其中任何一个都会产生一个包含三个值的数组["22222","11111","23232"]

到目前为止,我有var values = Regex.Split("22222, 11111, 23232", @"[\\s,;]+"),但这会产生一个包含第二个和第三个值的数组,包括空格,如下所示:

["22222"," 11111"," 23232"]
4

5 回答 5

35

你有两种可能:

在这种情况下,您希望通过特定的分隔符来拆分字符串。String.Split已为此特殊目的而创建。这种方法会比Regex.Split.

char[] delimiters = new [] { ',', ';', ' ' };  // List of your delimiters
var splittedArray = myString.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
于 2013-02-04T14:43:28.547 回答
8

您正在为字符串使用@符号,因此将"\"被解释为文字斜杠。所以你的字符类实际上是读作 a "\"、 an "s"、 a","或 a ";"。删除多余的斜线,它应该可以按需要工作:

var values = Regex.Split("22222, 11111, 23232", @"[\s,;]+")
于 2013-02-04T14:46:52.627 回答
2
Regex.Split("22222, 11111, 23232", @"[ ,;]+")

这对我有用

还要检查下面的答案,如果您真正需要的是根据几个字符分隔符拆分字符串 - string.split 可能是更好的解决方案

于 2013-02-04T14:43:03.447 回答
1

要从字面上解释“我正在尝试拆分一个可以用逗号、空格或分号分隔的字符串。它还可以在每个分隔符之后包含一个或多个空格”,请尝试:

@"[,;]\s*|\s+"

这具有连续分隔符(空格除外)不会被视为单个分隔符的属性。

但是,如果您希望将所有连续的分隔符视为一个,您不妨这样做:

@"[,;\s]+"

当然,在这种情况下string.Split,正如其他人所指出的那样,这是一个更简单的选择。

于 2013-02-04T14:51:56.953 回答
0

试试这个正则表达式模式:

([^,;\"\}\{\s*.]\d+)

对于示例文本:

{"123","456","789"}
1011,1213,1415
16, 17, 181920
212223;        242526;27
28 29 3031 

见演示

在此处输入图像描述

于 2015-04-07T10:50:28.317 回答