我在C#中创建自己的助手,接受不同类型的短语,我想验证这种字符串的货币转换:
“20欧元到欧元”
“125 mkd to dollar”
“30欧元到mkd”
“30 mkd to $”
等。
我不想要世界上所有的货币,我只需要mkd,euro,$,dollar。 此外,如果有一种方法,所以我可以轻松地将字符串解析为3个部分:value,firstUnit,secondUnit所以我可以在解析之后轻松地进行数学计算,这将是很棒的。
答案 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;
}
}