关于以逗号,空格或分号分隔的字符串上的c#:Regex.Split()

Regex.Split() on comma, space or semi-colon delimitted string

我正在尝试分割一个字符串,该字符串可以用逗号,空格或分号分隔。 每个定界符后面也可以包含一个或多个空格。 例如

1
2
3
4
5
6
7
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,;]+"),但这会生成一个包含第二个和第三个值的数组,其中包括空格,如下所示:

1
["22222"," 11111"," 23232"]

您有两种可能性:

  • Regex.Split
  • String.Split

在这种情况下,您想按特定的定界符分隔字符串。为此已创建String.Split。此方法将比Regex.Split更快。

1
2
char[] delimiters = new [] { ',', ';', ' ' };  // List of your delimiters
var splittedArray = myString.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);


您为字符串使用了@符号,因此"\"被解释为文字斜杠。因此,您的字符类实际上是作为"\""s"","";"读取的。删除多余的斜杠,它应该可以根据需要工作:

1
var values = Regex.Split("22222, 11111, 23232", @"[\s,;]+")


1
Regex.Split("22222, 11111, 23232", @"[ ,;]+")

这对我有用

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


要解释"我正在尝试拆分一个字符串,该字符串可以用逗号,空格或分号分隔。它在每个分隔符后也可以包含一个或多个空格",请尝试:

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

它具有以下特性:连续定界符(空格除外)将不被视为单个定界符。

但是,如果您希望将所有连续的定界符都视为一个,那么您也可以这样做:

1
@"[,;\s]+"

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


尝试以下正则表达式模式:

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

对于示例文本:

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

参见演示。

enter image description here