1

さまざまな種類のフレーズを受け入れる C# で独自のアシスタントを作成しており、通貨変換のためにこの種の文字列を検証したいと考えています。

"20 $ を ユーロ"
"125 mkd を ドル"
"30 ユーロをmkd"
"30 mkd を $"

私は世界のすべての通貨が欲しいわけではありません。mkd、euro、$、dollars だけが必要です。また、文字列を値、firstUnit、secondUnitの3つの部分に簡単に解析できる方法があれば、解析後に簡単に計算できるので、それは素晴らしいことです。

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 に答える