有没有办法只使用 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 来匹配也有数字的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
为啥用 Regex.IsMatch 检查这个字符串会导致 CPU 达到 100%?
C#正则验证大全 Regex.IsMatch()正则表达式验证