实现了一个包含国家代码的正则表达式。接下来,我在文本中查找这些代码,找到后,我将国家的全名添加到工作表中。很可能我在找到代码时做了一个拐杖。模板中,代码是单引号传入的,Dictionary中的key自然是没有的(key是code,value是全名,比如US)。为了通过 key 正确提取值,我通过 Substring 删除了这些引号,它开始在调试器中显示国家/地区的名称,但它给出了错误: System.ArgumentOutOfRangeException :索引和长度必须引用字符串中的位置。(参数“长度”
如何修复错误?没想到
代码(测试失败的方法之一):
public List<string> Text_Regul(string text)
{
List<string> coun;
Match m;
string teamp;
try
{
var list = GettingTextReg();
string pattern = string.Format("\'({0})\'", string.Join("|", list.Keys));
coun = new List<string>();
m = Regex.Match(text, pattern);
int i=1;
while (m.Success)
{
Group g = m.Groups[i];
if (g.Length >= 2)
{
teamp = list[g.Value.Substring(1, 2)];// тут ошибка.
if (list.ContainsKey(teamp))
{
coun.Add(teamp);
}
}
i++;
m = m.NextMatch();
}
} catch(ArgumentNullException e)
{
throw new ArgumentNullException(e.Message);
}
return coun;
}
截屏:


改为使用
SubString去掉引号Trim,因为国家代码不一定是两位数,例如"3". 具体来说,在您的情况下,尚不清楚包含什么g.Value,也许有一个短于 3 个字符的字符串,这就是异常的原因。