如何转换正则表达式匹配.值为整型

本文关键字:整型 正则表达式 何转换 转换 | 更新日期: 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;
 }