【问题标题】:Regex to get string between number and underscore C# [duplicate]正则表达式获取数字和下划线C#之间的字符串[重复]
【发布时间】:2019-12-28 05:55:35
【问题描述】:

我正在尝试制作一个正则表达式来获取某个数字和下划线之间的字符串,例如:

我有 CP_01Ags_v5,所以我需要一个正则表达式来匹配 Ags。另一个示例可能是 CP_13Hgo_v5 并匹配 Hgo

有什么想法吗?

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    根据您描述的示例和匹配项。你想要一些类似的东西。

    [0-9]+(.*)[_]
    

    将其分解。 正则表达式查找出现一次或多次的任何数字,然后匹配数字之后直到 [_] 下划线的所有内容。

    失败是假设您提供的示例相似。如果你的例子是

    CP_13Hgo_v5asdf_
    

    那么它就会匹配

    Hgo_v5asdf
    

    如果您有其他可能的发现,那么您需要此正则表达式的非贪婪版本。

    [0-9]+(.*?)[_]
    

    这将导致在此示例中找到两个组

    CP_13Hgo_v5asdf_
    

    将找到以下组:

    Hgo
    

    asdf
    

    【讨论】:

      【解决方案2】:

      您可以使用环视来匹配数字和下划线之间的字符串,例如

      (?<=\d)[A-Za-z]+(?=_)
      

      Demo on regex101

      在 C# 中(注意需要在正则表达式中转义 \):

      String s = @"CP_01Ags_v5 CP_13Hgo_v5";
      Match m = Regex.Match(s, "(?<=\\d)[A-Za-z]+(?=_)");
      while (m.Success) {
          Console.WriteLine(m.Value);
          m = m.NextMatch();
      }
      

      输出

      Ags
      Hgo
      

      【讨论】:

        【解决方案3】:

        如果您的字符串总是至少有两个字符,并且没有其他至少有两个字符的字符串,那么您可以应用以下内容:

        var text = "CP_01Ags_v5";
        var x = Regex.Match(text, @"(?<!^)[A-Za-z]{2,}");
        

        【讨论】:

          【解决方案4】:

          使用正则表达式Group:

          (?<leftPart>_\d{2})(?<YourTarget>[a-zA-Z])(?<rightPart>_[a-zA-Z0-9]{2})
          

          C#:

          Regex re = new Regex(@"(?<leftPart>_\d{2})(?<YourTarget>[a-zA-Z])(?<rightPart>_[a-zA-Z0-9]{2})");
          
          /*
          * Loop
          * To get value of group you want
          */
          foreach (Match item in re.Matches("CP_01Ags_v5 CP_13Hgo_v5,"))
          {
                  Console.WriteLine(" Match: " + item.ToString());
                  Console.WriteLine(" Your Target you want: " + item.Groups["YourTarget"]);        
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-28
            • 2018-03-22
            • 1970-01-01
            • 2019-03-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多