我有这个字符串,
|SomeText1|123|0#$0#62|SomeText2|456|6#83|SomeText3#61|SomeText1#41|SomeText5#62|SomeText3#82|SomeText9#40|SomeText2#$1#166|SomeText2|999|7#146|SomeText2#167|SomeText2#166|
我想只提取数字值并将它们添加到列表中,然后将它们相加。这意味着价值,
|123|,|456|, |999|
。
所有其他值,例如,
|SomeText1|,|SomeText2|,|SomeText2#$1#166|
不应该在列表中。
我正在使用C#。我尝试了类似的东西,
int sum = 0;
List<int> results = new List<int>();
Regex regexObj = new Regex(@"\|(.*?)\|");
Match matchResults = regexObj.Match(s);
while (matchResults.Success)
{
results.Add(Convert.ToInt32(matchResults));
matchResults = matchResults.NextMatch();
}
for (int i = 0; i < results.Count; i++)
{
int bonusValues = results[i];
sum = sum + bonusValues;
}
所以基本的想法是在| |
个字符之间提取值并忽略一个不是纯数字的字符,如
|#16543TextBL#aBLa564B|
答案 0 :(得分:2)
string input = @"|SomeText1|123|0#$0#62|SomeText2|456|6#83|SomeText3#61|SomeText1#41|SomeText5#62|SomeText3#82|SomeText9#40|SomeText2#$1#166|SomeText2|999|7#146|SomeText2#167|SomeText2#166|";
var numbers = Regex.Matches(input, @"\|(\d+)\|")
.Cast<Match>()
.Select(m => m.Groups[1].Value).ToList();
var sum = numbers.Sum(n => int.Parse(n));
答案 1 :(得分:1)
如果正则表达式没有明确要求,可以使用linq
stringName.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.Where(x => x.All(char.IsNumber)).ToList();
总和
stringName.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.Where(x => x.All(char.IsNumber)).Sum(x => int.Parse(x));
答案 2 :(得分:0)
你必须尝试下面的分期付款代码
Regex regexObj = new Regex(@"\d+");
\ d代表任何数字,+代表一个或多个。 如果你想捕获负数,你可以使用 - ?\ d +。
Regex regexObj = new Regex(@"-?\d+");
请注意,作为字符串,它应在C#中表示为&#34; \ d +&#34;,或@&#34; \ d +&#34;
答案 3 :(得分:-2)
如果您不需要特定的正则表达式,那么您可以轻松地将字符串拆分为:
string[] splits = s.split('|');
然后你可以循环遍历这组字符串并尝试将其解析为整数。我
for(int i=0; i<splits.size(); i++){
int num;
bool isNum = int.TryParse(splits[i], out num);
if(isNum){
list.add(num);
}
}