Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式帮助-对字符串中的数字求和?_C#_.net_Regex_Parsing_String - Fatal编程技术网

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

C# 正则表达式帮助-对字符串中的数字求和?,c#,.net,regex,parsing,string,C#,.net,Regex,Parsing,String,不确定这是否是最好的方法,但我有一些字符串表示某些块的方向。例如,“3V6V”表示一行3个垂直块,一行6个垂直块3V6V6V'是指第3、6、6行,全部垂直4H'将是4排4个水平块。i、 e.每2个字符构成一行。每个项目要么只是水平的,要么只是垂直的,没有混合和匹配。这里我需要做的是加上数字的总数来确定块的总数。我该怎么做?我想做一些string.split()运算,然后如果数组项是一个数字,将其添加到一个运行总数中。有没有更好的办法?”4H'为16,3V6V6V'为15。有人能给我指出正确的方向

不确定这是否是最好的方法,但我有一些字符串表示某些块的方向。例如,“3V6V”表示一行3个垂直块,一行6个垂直块3V6V6V'是指第3、6、6行,全部垂直4H'将是4排4个水平块。i、 e.每2个字符构成一行。每个项目要么只是水平的,要么只是垂直的,没有混合和匹配。这里我需要做的是加上数字的总数来确定块的总数。我该怎么做?我想做一些string.split()运算,然后如果数组项是一个数字,将其添加到一个运行总数中。有没有更好的办法?”4H'为16,3V6V6V'为15。有人能给我指出正确的方向吗?必须有一个相当简单的方法来做到这一点

谢谢,
~ck在圣地亚哥

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

((\d+([HV])(\d+\k)*
通过\k确保字符串中只有Hs或Vs,但不混合。返回值可能是一个数组,因此您可以轻松地对数字进行求和

int sum = Regex.Split(input, "[HV]")
                .Where(s => !string.IsNullOrEmpty(s))
                .Select(s => int.Parse(s))
                .Sum();
请注意,这将接受格式错误的输入,如“3H3”或“3H6V”

编辑:事实上,您可以使用字符串简化此操作。拆分:

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

这个问题让我想起了一句经典的格言:
有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题。
。。。这让我想起了下面的一句话:“有些人在面对正则表达式时,会想“我知道,我会用我记得的一句吸引人的话。”。现在,他们没有在讨论中添加任何内容。“
--Tomalak
“每2个字符组成一行”,因此行不能有10个或更多的块?我无法实现这一点。VisualStudio抱怨编译常量错误。我采用了李的解决方案,效果很好。谢谢你~ck
int sum = input.Split(new[] { 'H', 'V' }, StringSplitOptions.RemoveEmptyEntries)
    .Sum(str => int.Parse(str));