有没有办法只使用 Regex.IsMatch 来匹配也有数字的字符串?

Posted

技术标签:

【中文标题】有没有办法只使用 Regex.IsMatch 来匹配也有数字的字符串?【英文标题】:Is there a way to match a string that also has numbers using Regex.IsMatch only? 【发布时间】: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 可以是任何字母,但你的正则表达式允许空格而不是字母 【参考方案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】:

你可以用这个^\pL2\pNd4$ 测试它

解释

 ^             # BOS
 \pL2      # Two letters
 \pNd4     # 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\d4$")))
  
    Console.WriteLine(result);
  

【讨论】:

【参考方案5】:
Pattern : ^\w2\d4$
Match groups:
1.  df5455

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

【讨论】:

匹配 123456_12345 但不匹配 ñÑ1234

以上是关于有没有办法只使用 Regex.IsMatch 来匹配也有数字的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

c# regex.ismatch 使用变量

为啥用 Regex.IsMatch 检查这个字符串会导致 CPU 达到 100%?

regex.ismatch 验证是不是含有特殊字符

C#正则验证大全 Regex.IsMatch()正则表达式验证

C#正则验证大全 Regex.IsMatch()正则表达式验证

在 TextBox.Text 中退格后 Regex.IsMatch 不起作用