Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式识别字符串中的模式_C#_.net_Regex - Fatal编程技术网

C# 使用正则表达式识别字符串中的模式

C# 使用正则表达式识别字符串中的模式,c#,.net,regex,C#,.net,Regex,我很抱歉,如果这是一个重复的问题,因为我知道有很多关于StackOverflow上的正则表达式,但我还没有找到一个答案或我需要的帮助级别 我有一个长度必须为8的字符串,其中: 前两个字符是字母 接下来的五个字符是数字 最后一个字符是一个字母 例如:“AB12345C” 我一直在使用&中的例子,试图理解如何正确使用参数,但经过几天的阅读,我仍然无法通过 我目前正在尝试使用: public Tuple<bool, string> stringFormatCheck(string

我很抱歉,如果这是一个重复的问题,因为我知道有很多关于StackOverflow上的正则表达式,但我还没有找到一个答案或我需要的帮助级别

我有一个长度必须为8的字符串,其中:

  • 前两个字符是字母

  • 接下来的五个字符是数字

  • 最后一个字符是一个字母

例如:“AB12345C”

我一直在使用&中的例子,试图理解如何正确使用参数,但经过几天的阅读,我仍然无法通过

我目前正在尝试使用:

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,因此我相信这对我的论点很重要。你的例子非常清楚,非常有帮助,再次感谢!