如何转换正则表达式匹配.值为整型
本文关键字:整型 正则表达式 何转换 转换 | 更新日期: 2023-09-27 18:03:39
List<int> ids = ExtractIds("United Kingdom (656) - Aberdeen (7707)");
上面的列表应该由下面的方法填充,该方法将括号内的值去掉。
如果我使用match。Value作为字符串并赋值给List<字符串>它似乎工作的好。但是当我试图将其转换为整数时,我得到了错误:"输入字符串格式不正确。"字符串>
我做错了什么?
public List<int> ExtractIds(string str)
{
MatchCollection matchCollection = Regex.Matches(str, @"'((.*?)')");
List<int> ExtractedIds = new List<int>();
foreach (Match match in matchCollection)
{
int theid = int.Parse(match.Value);
ExtractedIds.Add(theid);
}
return ExtractedIds;
}
使用match.Groups[1].Value
而不是match.Value
来获取括号内的字符串-即不包括括号本身。
使用'd*?
而不是.?*
来确保您只匹配数字,而不是括号中的任何内容!
那么你甚至不再需要?
了,因为'd
不匹配右括号。
您可以在正则表达式(如
)中使用绕过,而不是在Groups[1]
中切换到查找。(?<='()'d(?='))
确保Match
只包含数字本身
如果你调试你的代码,你得到匹配。Value包含数字周围的括号,这显然会抛出异常。
重写你的模式为@"('d)+"这将分组你的数字,但忽略括号。
public List<int> ExtractIds(string str)
{
MatchCollection matchCollection = Regex.Matches(str, @"('d)+");
List<int> ExtractedIds = new List<int>();
foreach (Match match in matchCollection)
{
int theid = int.Parse(match.Value);
ExtractedIds.Add(theid);
}
return ExtractedIds;
}