C# 使用正则表达式提取版本信息

C# 使用正则表达式提取版本信息,c#,regex,C#,Regex,我需要从以下字符串中提取版本信息 993-756-V01 ver 02a 从993-756-V01ver02a中提取01和02需要使用什么正则表达式 我试图用下面的正则表达式提取版本子字符串,即V01 ver 02a [A-Z][0-9]{2} ver [0-9]{2} 但是有没有更直接的方法来提取信息您可以使用带有命名捕获组的正则表达式来捕获所需的信息。请参阅以下代码: var s = "993-756-V01 ver 02a"; var result = Regex.Match(s, @

我需要从以下字符串中提取版本信息

993-756-V01 ver 02a
从993-756-V01ver02a中提取0102需要使用什么正则表达式

我试图用下面的正则表达式提取版本子字符串,即V01 ver 02a

[A-Z][0-9]{2} ver [0-9]{2}
但是有没有更直接的方法来提取信息

您可以使用带有命名捕获组的正则表达式来捕获所需的信息。请参阅以下代码:

var s = "993-756-V01 ver 02a";
var result = Regex.Match(s, @"(?<major>[0-9]+)\s+ver\s+(?<minor>[0-9]+)");
if (result.Success)
{
    Console.WriteLine("Major: {0}\nMinor: {1}", 
        result.Groups["major"].Value, result.Groups["minor"].Value);
}
var s=“993-756-V01版本02a”;
var result=Regex.Match(s,@“(?[0-9]+)\s+ver\s+(?[0-9]+)”;
如果(结果、成功)
{
WriteLine(“主要:{0}\n最小:{1}”,
结果.组[“主要”]值,结果.组[“次要”]值);
}

图案细节

  • (?[0-9]+)
    -组“主要”捕获1+个数字
  • \s+
    -1+空格
  • ver\s+
    -
    ver
    子字符串,然后是1+空格
  • (?[0-9]+)
    -将捕获1+个数字的“次要”分组

    • 我看到的另一个简短的可能性是使用以下模式:

      V(\d+)\D+(\d+)
      
      在这里:


      我建议添加组:
      [A-Z](?[0-9]{2})ver(?[0-9]{2})
      @DmitryBychenko:当它事先不识别和条目时,如何实现分组。你的意思是说
      [A-Z]([0-9]{2})ver([0-9]{2})
      @this Me:你说它事先不识别和条目是什么意思?正则表达式将必要的细节匹配并捕获到“主要”和“次要”组中。看德米特里的。您也可以使用
      [A-Z](?[0-9]+)ver(?[0-9]+)
      在C#中如何使用这个主要和次要分组?谢谢您为我简化了这个。我以这种方式使用Linq使组过于复杂化了
      foreach(matchCollection中的匹配){List groupList=newlist(Match.groups.Cast());Group[]groupResult=groupList.Where((n)=>n.Length==2.ToArray();if(groupResult.Length>1){majorVersion=groupResult[0]。Value;minorVersion=groupResult[1]。Value;}}
      是的,这是大量冗余代码。如果我的答案被证明是有用的,请考虑投票。
      V     = Literal `V` capital alphabet.
      (\d+) = Captures any digit from 0-9 following `V` character. 
      \D+   = Anything except digit next to digits. (A way to find the next numeric part of your version number)
      (\d+) = Captures any digit from 0-9 following non-digit characters.