正则表达式的误解

时间:2013-06-14 15:20:07

标签: c# regex

我试图使用正则表达式来检查字母,所以我使用了以下方法。问题是,如果我在信件之前或之后有一个数字,那么这个数字就会被忽略而且没有任何反应,这不是我想要做的事情。我只是想检查字母,所以如果我还有其他字母,那么会弹出一条错误信息。如果我只有字母就可以正常工作,如果我只有数字它也可以正常工作,问题是如果我有一个字母和一个数字它确实工作正常,除此之外一切正常。

Regex _regex = new Regex("[A-Z]");
Match Instruction_match = _regex.Match(Instruction_Seperator[1]);

if (!Instruction_match.Success) // "A," or "B," or "C,"...etc.
{
     Messagebox.show("Error, Please letters only");
}

请注意,Instruction_Seperator [1]是通过文本框从用户处获取的,用户必须在字母之前或字母之后不输入任何字母。你知道为什么当我输入字母和数字时,消息框不会弹出。

期待您的回复:)

我可以有一个特定的大小,如果用户超出弹出错误,例如,如果允许用户只输入3个拉丁字母而没有别的,那么正则表达式是否有长度限制:)

4 个答案:

答案 0 :(得分:5)

该模式将匹配包含大写拉丁字母的任何字符串;如果碰巧包含任何其他字符,它们将被忽略。如果您想要匹配的字符串,如果字符串包含 大写拉丁字母,那么您将需要使用start(^)和end({{1 }})锚点,以及你的角色类之后的一个或多个量词($),如下所示:

+

最后,您的代码应如下所示:

^[A-Z]+$

鉴于您的问题的更新以及您所做的其他一些评论,以下是您可能需要使用的更多模式:

  • Regex _regex = new Regex("^[A-Z]+$"); Match Instruction_match = _regex.Match(Instruction_Seperator[1]); if (!Instruction_match.Success) // "A," or "B," or "C,"...etc. { Messagebox.show("Error, Please letters only"); } - 此模式将恰好匹配三个大写拉丁字符
  • ^[A-Z]{3}$ - 此模式将匹配一个,两个或三个大写拉丁字符
  • ^[A-Z]{1,3}$ - 此模式将匹配一个或三个大写拉丁字符

答案 1 :(得分:1)

将您的模式更改为:

Regex _regex = new Regex("^[A-Z]+$");

答案 2 :(得分:1)

您使用的正则表达式[A-Z]只匹配一个大写字母。将[A-Z]+用于输入的任何长度的连续大写字母子字符串。使用^[A-Z]+$表示子字符串锚定在输入字符串的开始和结束位置。

答案 3 :(得分:0)

我假设你只想匹配一个字母,所以下面唯一匹配的字符串是“D”,如果你想要任意数量的单词使用^ [A-Z] + $

var patterns = new string[] { "12ABC", "D", "A","AB","ABC","A2B3","A1BC", "A123", "123ABC12" };
var regex = new Regex(@"^[A-Z]{1,3}$");
foreach (var pattern in patterns)
{
    var isMatch = regex.Match(pattern);
    if (isMatch.Success)
    Console.WriteLine("Found Matching string {0}", pattern);
}

请查看修改后的代码,您的问题的更改是将{1,3}添加到正则表达式模式,这意味着最多可出现3次拉丁文单词。