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