0

生病了。我正在使用正则表达式从设置文件中获取匹配项。它只是获取默认值。我参加比赛,让它打印字符串匹配。然后我使用 Convert.toInt32(match) 并将其放入 int tempval。这是代码。

string[] settings = System.IO.File.ReadAllLines("Settings.txt");
MatchCollection settingsmatch;
Regex expression = new Regex(@"first number: (\d+)");
settingsmatch = expression.Matches(settings[0]);
MessageBox.Show(settingsmatch[0].Value);
int tempval = Convert.ToInt32("+" + settingsmatch[0].Value.Trim());   //here is the runtime error
numericUpDown1.Value = tempval;

这是设置文本文件:

first number: 35
second number: 4
default test file: DefaultTest.txt

我知道问题是转换,因为我注释掉了 numericupdown 行并且在运行时仍然出现错误。

这是一个格式错误。我不明白。我虽然我的比赛是一个字符串,所以 Convert 应该接受它。此外,messagebox.show 向我显示了一个数字。准确地说是35号。还有什么可能导致这种情况?

4

2 回答 2

1

第一场比赛将是first number: 35。为了获得匹配的号码,请使用该Match.Groups属性。

settingsmatch = expression.Matches(settings[0]);
MessageBox.Show(settingsmatch[0].Groups[1].Value);
int tempval = Convert.ToInt32(settingsmatch[0].Groups[1].Value); // .Trim() is not needed because you are matching digits only
于 2014-08-17T02:46:04.570 回答
0

您正在做的是将整个匹配的值转换为Integer. 您需要转换第一组捕获的值。

// convert the value of first group instead of entire match
//    settingsmatch[0].Value is "first number: 35"
//    settingsmatch[0].Groups[1].Value is "35"
int tempval = Convert.ToInt32("+" + settingsmatch[0].Groups[1].Value);
于 2014-08-17T02:49:17.300 回答