正则表达式的误解

本文关键字:误解 正则表达式 | 更新日期: 2023-09-27 18:18:21

我试图使用正则表达式来检查字母,所以我使用下面的方法。问题是,如果我在字母之前或之后有一个数字,这个数字就会被忽略,什么也不会发生,这不是我想要做的。我试图检查字母只有这样,如果我有其他的字母,然后一个错误信息弹出。如果我只有字母,它工作得很好,如果我只有数字,它也工作得很好,问题是,如果我有一个字母和一个数字,它不能正常工作,除了一切都工作得很好。

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_separator[1]是通过一个文本框从用户获取的,其中用户必须只输入字母,不能在字母之前输入,也不能在字母之后输入。你知道为什么当我输入字母和数字时,消息框不弹出吗?

期待您的回复:)

我可以有一个特定的大小,如果用户超过弹出一个错误,例如,如果用户只允许输入3个拉丁字母,没有其他,是否有长度约束在regex:)

正则表达式的误解

该模式将匹配任何包含大写拉丁字母的字符串;如果它碰巧包含任何其他字符,它们将被忽略。如果您想要匹配字符串中只包含大写拉丁字母的模式,则需要在字符类之后使用开始(^)和结束($)锚,以及一个或多个量词(+),如:

^[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}$ -该模式将匹配一个、两个或三个大写拉丁字符
  • ^[A-Z]([A-Z]{2})?$ -该模式将匹配一个或三个大写拉丁字符

将样式改为:

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

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

我假设您只希望匹配一个字母,因此在下面的示例中唯一匹配的字符串是"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);
}

请查看修改后的代码,您的问题的更改是在regex模式中添加{1,3},这意味着最多出现3次拉丁单词。