用空格和逗号分隔,忽略字符串末尾的单个数字

时间:2017-03-23 11:41:27

标签: c# regex

这是我的格式:

20130101 1700002497,1.320202,1.3203203,0

我需要将其拆分为数组中的4个值。我正在使用的正则表达式很简单:\s|\,但我想忽略最后的零,因为它进入数组以及第5个值。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以添加一个可选的消费组,该消费组将匹配字符串末尾的单个数字:

[\s,]+(?:[0-9]$)?
      ^^^^^^^^^^^

请参阅regex demo

<强>详情:

  • [\s,]+ - 一个或多个空格或逗号
  • (?:[0-9]$)? - 一个可选的非捕获组,匹配字符串末尾([0-9])的单个数字($)。

enter image description here

在C#中:

var res = Regex.Split(s, @"[\s,]+(?:[0-9]$)?").Where(m => !string.IsNullOrEmpty(m));

匹配所有数字但匹配字符串末尾的单个数字的方法:

[+-]?(?!(?<!^)[0-9]$)[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?

请参阅regex demo

如果1位数字在最后,(?!(?<!^)[0-9]$)前瞻将使匹配失败,并且不在字符串的开头。

C#:

var res = Regex.Matches(s, @"[+-]?(?!(?<!^)[0-9]$)[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?")
    .Cast<Match>()
    .Select(m => m.Value)
    .ToList();

答案 1 :(得分:0)

var res = Regex.Split(s, @"([\d.]{2,})");