C#中的正则表达式,用于来自字符串的货币转换

时间:2013-05-08 08:57:41

标签: c# regex

我在C#中创建自己的助手,接受不同类型的短语,我想验证这种字符串的货币转换:

“20欧元到欧元”
“125 mkd to dollar”
“30欧元到mkd”
“30 mkd to $”

等。

我不想要世界上所有的货币,我只需要mkd,euro,$,dollar。 此外,如果有一种方法,所以我可以轻松地将字符串解析为3个部分:value,firstUnit,secondUnit所以我可以在解析之后轻松地进行数学计算,这将是很棒的。

2 个答案:

答案 0 :(得分:2)

这样的事情:

(?<value>\d+) (?<currency>[^\s]+) to (?<targetcurrency>[^\s]+)

然后在c#中使用如下:

//remember to escape the '\' characters
var regex = "(?<value>\\d+) (?<currency>[^\\s]+) to (?<targetcurrency>[^\\s]+)";

var results = Regex.Match(str, regex);
if (results.Success)
{
    var value = results.Groups["value"].Value; //parse it int/float as you need to
    var currency = results.Groups["currency"].Value;
    var targetCurrency = results.Groups["targetcurrency"].Value;
}

答案 1 :(得分:-3)

对于这类问题,我不会使用正则表达式,因为你正在解析每个字符串不同的“令牌”(例如'euro'' $','mkd')。相反,您应该使用简单的解析函数将字符串拆分为其部分,然后识别每个“令牌”。如果复杂性增加,这种方法会更灵活。

    private void Form1_Load(object sender, EventArgs e)
    {
        String first = "20 $ to euro";

        String[] result = first.Split(null);

        for (int i = 0; i < result.Count(); i++)
        {
            MessageBox.Show(result[i]);

            switch (i)
            {
                case 0: getCurrencyValue(result[i]); break;
                case 1: parseCurrencyFrom(result[i]); break;
                case 2: parseCurrencyTo(result[i]); break;
            }

        }

    }

    public void parseCurrencyTo(String currencyCode)
    {
        switch (currencyCode)
        {
            case "euro": stuff(); break;
            case "$": stuff() break;
        }
    }