正则表达式正确分割

时间:2018-02-09 15:19:15

标签: c# regex split

我有一个字符串,其中包含数字和其他字符,例如:123\n456? * ,, ;;; '' 333\n789/\\+-,我试图只将数字作为数组获取

123
456
333
789

我尝试过像

这样的东西
serials = Regex.Replace(serials, @"\r\n?|\n|\t", " ");

var serialNumbers = Regex.Split(serials, @"(?<!($|[^\\])(\\\\)*?\\);");

但我的数组有类似

的内容
123 456? * ,, 
empty
empty
 '' 333 789/\\+-

有没有办法正确拆分这个字符串?

2 个答案:

答案 0 :(得分:6)

尝试匹配,而不是拆分(即从字符串中提取数字):

 string[] numbers = Regex
   .Matches(source, "[0-9]+")
   .OfType<Match>()
   .Select(match => match.Value)
   .ToArray();

如果你坚持分裂,可以

 string[] numbers = Regex
   .Split(source, "[^0-9]+");

更紧凑,但可能不太可读。

答案 1 :(得分:0)

您可以尝试以下内容:

int[] numbers = Regex.Split(input, @"\D+")
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToArray();

如果你想要它们像字符串一样,只需删除(int.Parse)行。 它的工作方式如下:  按字符串拆分字符串,然后尝试解析集合中的每个字符串,如果可能只是将字符串放入集合中,(out _是C#7功能,您可以在此处阅读更多内容 - &gt; {{3然后,如果你需要,你可以将每个字符串解析为数字和&#34;实现&#34;他们进入阵列你可以在这里查看 - &gt; Discards