【问题标题】:Is there a way to match a string that also has numbers using Regex.IsMatch only?有没有办法只使用 Regex.IsMatch 来匹配也有数字的字符串?
【发布时间】:2019-11-13 06:53:24
【问题描述】:

我想知道是否有一个正则表达式来评估格式如下的字符串:“XXYYYY”,其中 XX 是任意字母,YYYY 是任意数字。

我使用这段代码来完成它,但我确信有更好的方法不使用 Substring 而只使用 Regex.IsMatch。 谢谢!

 if (Regex.IsMatch(ValueString.Substring(0, 2), @"^[a-zA-ZñÑ\s]+$"))
 {
   if (int.TryParse(ValueString.Substring(2, 4), out value))
   {
   return true;
   }
 }

【问题讨论】:

  • “1234”是一个有效的字符串吗?因为有问题你说 XX 可以是任何字母,但你的正则表达式允许空格而不是字母

标签: c# regex match


【解决方案1】:

您可以使用单个正则表达式来测试 2 个字母和 4 个数字:

if (Regex.IsMatch(ValueString, "^[a-zA-ZñÑ\s]{2}[\d]{4}$");

【讨论】:

    【解决方案2】:

    只需在现有模式中添加量词和数字模式即可:

    return Regex.IsMatch(ValueString, @"^[a-zA-ZñÑ]{2}[0-9]{4}$");
    

    {2} 表示“正好是前面表达式的 2 个”。使用[0-9] 而不是\d 会限制与拉丁十进制数字匹配的数字范围(\d+ 也会包括来自其他字母的数字)

    【讨论】:

      【解决方案3】:

      你可以用这个^\p{L}{2}\p{Nd}{4}$ 测试它

      解释

       ^             # BOS
       \p{L}{2}      # Two letters
       \p{Nd}{4}     # Four number digits
       $             # EOS
      

      【讨论】:

        【解决方案4】:

        另一种解决方案:

          string[] data =
          {
            "AB1234", // True
            "XA3456", // True
            "3d34hg", // False
            " .1234", // False
            "ñÑ1234", // True
            "ôà1234", // True 
          };
        
          foreach (bool result in data.Select(s => Regex.IsMatch(s, @"^[^\d\s\W]{2}\d{4}$")))
          {
            Console.WriteLine(result);
          }
        

        【讨论】:

          【解决方案5】:
          Pattern : ^\w{2}\d{4}$
          Match groups:
          1.  df5455
          

          https://rubular.com/r/031g7m7uTE5MvU

          【讨论】:

          • 匹配 123456_12345 但不匹配 ñÑ1234
          猜你喜欢
          • 1970-01-01
          • 2021-09-20
          • 1970-01-01
          • 2021-12-06
          • 2011-08-25
          • 2021-06-10
          • 2021-01-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多