Regex.Split()用逗号,空格或分号分隔的字符串

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

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"] 

你有两种可能性:

  • Regex.Split
  • String.Split

在这种情况下,您希望通过特定的分隔符caracters分割字符串。 String.Split是为此特殊目的而创建的。 这种方法比Regex.Split更快。

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

您对字符串使用@符号,因此"\"被解释为文字斜杠。 所以你的角色类实际上是作为"\""s"","";" 。 删除额外的斜杠,它应该按照需要工作:

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

这对我有用

另外检查下面的答案,如果您真正需要的是基于少数char分隔符拆分字符串 – string.split可能是一个更好的解决方案

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

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

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

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

 @"[,;\s]+" 

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

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

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

对于示例文本:

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

见演示 。

在此处输入图像描述