1

我正在用 C# 制作自己的助手,它接受不同类型的短语,我想验证这种字符串以进行货币转换:

"20 美元兑欧元"
"125 mkd 兑美元"
"30 欧元兑 mkd"
"30 mkd 兑美元"

等等

我不想要世界上所有的货币,我只需要 mkd,euro,$,dollars。此外,如果有一种方法可以轻松地将字符串解析为 3 个部分:值、firstUnit、secondUnit,这样我就可以在解析后轻松地进行数学运算,那就太好了。

4

2 回答 2

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;
}
于 2013-05-08T09:05:04.753 回答
-3

对于这类问题,我不会使用正则表达式,因为您正在解析每个字符串中不同的不同“令牌”(例如“欧元”、“$”、“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;
        }
    }
于 2013-05-08T09:04:50.373 回答