【问题标题】:Regular Expression: single word正则表达式:单个单词
【发布时间】:2011-10-10 13:25:03
【问题描述】:

如果用户输入是单个单词,我想检查 C# 程序。我的单词只有字符 A-Z 和 a-z。没有空格或其他字符。 我尝试 [A-Za-z]* ,但这不起作用。这个表达有什么问题?

Regex regex = new Regex("[A-Za-z]*");
if (!regex.IsMatch(userinput);)
{
  ...
}

你能推荐一个包含正则表达式示例的综合列表的网站吗?!

【问题讨论】:

  • 记住你是在剪掉àèéìòù...

标签: c# .net regex


【解决方案1】:

它可能有效,但您没有锚定正则表达式。您需要使用^$ 将表达式分别锚定到字符串的开头和结尾:

Regex regex = new Regex("^[A-Za-z]+$");

我还将* 更改为+,因为* 将匹配0 次或多次,而+ 将匹配1 次或多次。

【讨论】:

  • 考虑国际字符的[A-Za-z] 有什么好的替代品?
  • 另外,我认为我会让表达式不区分大小写,而不是在这种情况下复制字符范围。
  • @Svish 我发布的答案应该可以处理这种情况。
【解决方案2】:

您应该为字符串的开头和结尾添加锚点:^[A-Za-z]+$

【讨论】:

    【解决方案3】:

    关于正则表达式示例的问题,请查看http://regexlib.com/

    对于正则表达式,请查看特殊字符 ^$,它们表示字符串的开始和结束。 This site 可以在以后构建正则表达式时派上用场。

    【讨论】:

      【解决方案4】:

      正则表达式中的星号字符指定“零个或多个前面的字符类”。

      这解释了您的表达式失败的原因,因为如果字符串包含零个或多个字母,它将成功。

      您可能打算使用一个或多个字母,在这种情况下,您应该使用加号而不是星号。

      进行了该更改,现在如果您输入一个不包含任何字母的字符串,它将失败。

      但是,这仍然不能完全为您工作,因为它会允许字符串中包含其他字符。如果您想将其限制为 个字母,没有其他内容,那么您需要在您的正则表达式中提供开始和结束锚点(^$)以使表达式检查“一个或多个字母”附加到字符串的开头和结尾。

      ^[a-zA-Z]+$
      

      这应该按预期工作。

      希望对您有所帮助。

      有关正则表达式的更多信息,我推荐http://www.regular-expressions.info/reference.html 作为一个很好的参考站点。

      【讨论】:

        【解决方案5】:

        我不知道 C# 的正则表达式语法是什么,但试试[A-Za-z]+

        【讨论】:

          【解决方案6】:

          尝试^[A-Za-z]+$ 如果您不包含^$,它将匹配字符串中包含字母字符的任何部分。

          【讨论】:

            【解决方案7】:

            我知道这个问题只是关于严格的字母输入,但这里有一个有趣的方法来解决这个问题,它不会破坏重音字母和其他此类特殊字符。

            正则表达式“^\b.+?\b”将匹配字符串开头的第一个单词,但如果字符串实际上以有效的单词字符开头。使用它,您可以简单地检查 A) 字符串是否匹配,以及 B) 匹配字符串的长度是否等于完整字符串的长度:

            public Boolean IsSingleWord(String userInput)
            {
                Regex firstWordRegex = new Regex("^\\b.+?\\b");
                Match firstWordMatch = firstWordRegex.Match(userInput);
                return firstWordMatch.Success && firstWordMatch.Length == userInput.Length;
            }
            

            【讨论】:

              【解决方案8】:

              其他人已经写了如何解决您知道的问题。现在我将谈谈您可能不知道的问题:变音符号:-) 您的解决方案不支持 àèéìòù 和许多其他字母。正确的解决方案是:

              ^(\p{L}\p{M}*)+$
              

              其中\p{L} 是任何字母加上\p{M}*,即0 个或多个变音符号(在Unicode 中,变音符号可以与基本字母“分离”,因此您可以使用a + ` = à 之类的内容,或者您​​可以使用预先组合的字符,例如标准à)

              【讨论】:

                【解决方案9】:

                如果您只需要字符 a-zA-Z,您可以简单地遍历字符并比较单个字符(如果它们在您的范围内)

                例如: 对于每个字符 c: ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')

                这可以提高你的表现

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-12-13
                  • 2010-11-15
                  • 2021-12-30
                  • 2012-01-06
                  • 2011-11-19
                  • 2017-03-13
                  相关资源
                  最近更新 更多