正则表达式帮助 - 对字符串中的数字求和?

时间:2010-07-09 20:31:00

标签: c# .net regex parsing string

不确定这是否是最佳方法,但我有一些代表某些块方向的字符串。例如,“3V6V”表示一行3个垂直块,以及一行6个垂直块。 '3V6V6V'表示所有垂直的3,6,6行。 '4H4H4H4H'将是4行4个水平块。即每2个字符构成一行。每个项目将只有横向或垂直,没有混合和匹配。我需要做的是添加总数来确定块的总数。我怎样才能做到这一点?我在想做某种string.split()然后如果一个数组项是一个数字,将它添加到一个运行总计。有更好的方法吗? '4H4H4H4H'将是16而'3V6V6V'将是15.有人能指出我正确的方向吗?必须有一个相当简单的方法来做到这一点。

谢谢,
〜在圣地亚哥

2 个答案:

答案 0 :(得分:2)

int sum = Regex.Split(input, "[HV]")
                .Where(s => !string.IsNullOrEmpty(s))
                .Select(s => int.Parse(s))
                .Sum();

请注意,这会接受格式错误的输入,例如“3H3”或“3H6V”

编辑:事实上你可以用String.Split来简化它:

int sum = input.Split(new[] { 'H', 'V' }, StringSplitOptions.RemoveEmptyEntries)
    .Sum(str => int.Parse(str));

答案 1 :(得分:0)

我将使用(未测试)的RegExp是:

((\d+)(?<type>[HV]))((\d+)\k<type>)*

通过\ k,您确保只有Hs或Vs在字符串中,但不能混合。返回值可能是一个数组,因此您可以轻松地总结数字。