我正在用 C# 制作自己的助手,它接受不同类型的短语,我想验证这种字符串以进行货币转换:
"20 美元兑欧元"
"125 mkd 兑美元"
"30 欧元兑 mkd"
"30 mkd 兑美元"
等等
我不想要世界上所有的货币,我只需要 mkd,euro,$,dollars。此外,如果有一种方法可以轻松地将字符串解析为 3 个部分:值、firstUnit、secondUnit,这样我就可以在解析后轻松地进行数学运算,那就太好了。
像这样的东西:
(?<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;
}
对于这类问题,我不会使用正则表达式,因为您正在解析每个字符串中不同的不同“令牌”(例如“欧元”、“$”、“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;
}
}