C# 使用正则表达式识别字符串中的模式
我很抱歉,如果这是一个重复的问题,因为我知道有很多关于StackOverflow上的正则表达式,但我还没有找到一个答案或我需要的帮助级别 我有一个长度必须为8的字符串,其中:C# 使用正则表达式识别字符串中的模式,c#,.net,regex,C#,.net,Regex,我很抱歉,如果这是一个重复的问题,因为我知道有很多关于StackOverflow上的正则表达式,但我还没有找到一个答案或我需要的帮助级别 我有一个长度必须为8的字符串,其中: 前两个字符是字母 接下来的五个字符是数字 最后一个字符是一个字母 例如:“AB12345C” 我一直在使用&中的例子,试图理解如何正确使用参数,但经过几天的阅读,我仍然无法通过 我目前正在尝试使用: public Tuple<bool, string> stringFormatCheck(string
- 前两个字符是字母
- 接下来的五个字符是数字
- 最后一个字符是一个字母
public Tuple<bool, string> stringFormatCheck(string input)
{
if (Regex.IsMatch(input, @"^[a-zA-Z]\d{2}[0-9]\d{5}[a-zA-Z]$") == true)
return Tuple.Create(true, "String is Fine");
else
return Tuple.Create(false, "String Format is incorrect");
}
公共元组stringFormatCheck(字符串输入)
{
if(Regex.IsMatch(输入,@“^[a-zA-Z]\d{2}[0-9]\d{5}[a-zA-Z]$”)==true)
返回Tuple.Create(true,“字符串很好”);
其他的
返回Tuple.Create(false,“字符串格式不正确”);
}
有人能告诉我如何正确地使用这个参数吗?或者在什么地方我能更好地理解Regex类?多谢各位
EDIT1:我第一个参数中的第二个Z现在大写。正确的模式是
"^[A-Za-z]{2}[0-9]{5}[A-Za-z]$"
用,IMHO,清晰的解释:
^ - string start (anchor)
[A-Za-z]{2} - 2 letters A..Z or a..z
[0-9]{5} - 5 digits 0..9
[A-Za-z] - letter A..Z or a..z
$ - string end (anchor)
因此,实现是可以实现的
public Tuple<bool, string> stringFormatCheck(string input)
{
if (Regex.IsMatch(input, @"^[A-Za-z]{2}[0-9]{5}[A-Za-z]$"))
return Tuple.Create(true, "String is Fine");
else
return Tuple.Create(false, "String Format is incorrect");
}
公共元组stringFormatCheck(字符串输入)
{
if(Regex.IsMatch(输入@“^[A-Za-z]{2}[0-9]{5}[A-Za-z]$”)
返回Tuple.Create(true,“字符串很好”);
其他的
返回Tuple.Create(false,“字符串格式不正确”);
}
请注意,[0-9]
是比\d
更好的选择,因为您,
我不想让,比如说,波斯语数字像“AB۰۱۳۴C” 试试这个:
^[a-zA-Z]{2}[0-9]{5}[a-zA-Z]$
您的正则表达式:
^[a-zA-z]\d{2}[0-9]\d{5}[a-zA-z]$
由于多种原因无法工作。首先,第二个z应该大写。然后,第一个\d
试图匹配一个数字,所以你说“匹配任何字母然后两个数字”。你对第二个\d
犯同样的错误:你说“匹配任何数字([0-9]
),然后匹配5个数字(\d{5}
)。像“expresso”()或“the regulator”)这样的工具“将帮助您分析、构建和测试正则表达式,您尝试过其中一种吗?@PaoloTedesco不,我不知道这些工具存在。我一定会调查的,谢谢!您的第一个[a-zA-z]
错误。第二个Z应该是大写的。我很好奇您是如何测试正则表达式的,以及是什么让您确信它不起作用。@据我所知,如果输入字符串与正则表达式参数匹配,regex.IsMatch将返回true。当我传入一个我自己分配的字符串时,我知道该字符串适合我试图匹配的模式,但到目前为止它只返回false。@RinkTaguar:将您的正则表达式放入Expresso->正则表达式面板:“正则表达式分析器”面板将立即向您显示错误:)(可能)反例:“AB۰۱۳۴C”
被接受,当我确信它应该被拒绝的时候;请注意波斯数字。@DmitryBychenko:这可以通过RegexOptions.ECMAScript
@DmitryBychenko得到帮助,谢谢。我已经用[0-9]
替换了\d
。谢谢,我从另一位那里得到了关于这个问题的答案,但你们两位都让我更好地理解了使用正则表达式的参数。非常感谢!只是出于好奇,在第一个和最后一个参数中,大写字母A-Z必须在小写字母A-Z之前吗?@RinkTaguar:不,顺序可以是任意的A-Za-Z
,就像A-Za-Z
一样奇妙,代码现在按预期通过了。非常感谢,我知道我错在哪里了,并且可以在我未来的项目中正确地使用它!不客气!在您当前的模式中,只需删除两个\d
我在网上看到的几乎每个示例中都看到了/d,因此我相信这对我的论点很重要。你的例子非常清楚,非常有帮助,再次感谢!