从包含少于值的逗号分隔字符串中获取值

时间:2017-07-20 23:58:14

标签: c# regex

我试图将逗号分隔的字符串与十进制变量进行比较,并仅查找小于我的变量的数量。

我遇到的问题是我的字符串如下:

  

1美元,5USD,10USD,20USD

我能够使用逗号分隔符和正则表达式拆分将字符串分成集合,但我不认为这是最好的方法,因为我需要检查值并使用us和逗号重建分离 - 。

我的程序将处理的真实世界示例是

decimal changeAvil = 10
notesSet = 1usd,5usd,10usd,20usd

结果应为notesSet = 1usd,5usd

3 个答案:

答案 0 :(得分:0)

它不是从未写过的最漂亮的代码,但它确实起作用了。 我使用Linq选择数字字符串的前缀,然后将这些字符串与changeAvil的值进行比较。

using System;
using System.Linq;

namespace stack
{
    class Program
    {
        static void Main(string[] args)
        {
            decimal changeAvil = 10;
            var noteSet = "1usd,5usd,10usd,20usd";
            var notes = noteSet.Split(',');
            var dict = 
                notes.ToDictionary(
                    x => int.Parse(new string(x.TakeWhile(c => char.IsNumber(c))
                                               .ToArray())), // key
                    x => x); // value

            var selection = dict.Where(kvp => kvp.Key <= changeAvil)
                                .Select(kvp => kvp.Value)
                                .ToList();
            foreach (var s in selection) {
                Console.WriteLine(s);
            }

        }
    }
}

解决方案返回1usd5usd10usd。如果您不希望10usd成为Linq表达式的kvp.Key <= changeAvil子句中结果更改kvp.Key < changeAvilWhere的一部分。

答案 1 :(得分:0)

您可以使用拆分命令删除字母&#39; usd&#39;然后遍历数组并进行比较

decimal changeAvil = 10
notesSet = 1usd,5usd,10usd,20usd
string noteset_new = noteset.Replace('usd',''); //remove usd
string[] noteset_array = noteset_new.split[',']; //split in to array

现在你可以迭代上面的noteset_array并按你想做的去做。

答案 2 :(得分:0)

对字符串使用replace和split是在字符串字符中使用两次迭代。 获取数组的更好方法是首先在字符串末尾添加逗号,然后使用split:

notesSet = 1usd,5usd,10usd,20usd
string[] noteset_array = (notesSet + ',').split['usd,']; //split in to array