检查字符串是否包含大写字母" inside"它

时间:2016-02-05 08:21:54

标签: c# regex string list .net-4.5

我正在为单词表制作过滤器。

所以这里有一些示例单词,它们在单词列表中:

var words = new List<string>();
var finalList = new List<string>();

words.Add("McLaren");//false
words.Add("Nissan");//true
words.Add("BMW");//false
words.Add("Subaru");//true
words.Add("Maserati");//true
words.Add("Mercedes Benz");//false
words.Add("Volkswagen");//true
words.Add("audi");//true
words.Add("Alfa Romeo");//false
words.Add("rollsRoyce");//false
words.Add("drive");//true

对于这个任务,我需要一个只接受字母的正则表达式(没有特殊字符,没有空格)。这些词必须包含至少4个无限的字符。它应该只接受字符串开头的大写字母。这就是我的问题所在。

这是我的代码:

var WordRegex = new Regex("^[a-zA-Z]{4,}$", RegexOptions.Compiled | RegexOptions.CultureInvariant);
var secondRegex = new Regex("([A-Z]{1})");

foreach (var word in words)
{
    if (WordRegex.IsMatch(word) && secondRegex.Matches(word).Count == 1)
    {
        finalList.Add(word);
    }
}

我遇到的问题是“&quot; lowerCase&#39;进入我不想要的finallist。如果大写字母位于字符串的开头,我只希望它进入finalList。

我的第二个正则表达式是阻止像麦克拉伦这样的词汇。因为它有两个大写字母。

再次:

  • McLaren&lt; ---不应该接受(两个大写字母)
  • mcLaren&lt; ---不应该接受(大写字母&#34; 里面&#34; *字符串)
  • 麦克拉伦&lt; ---应该接受(开头大写)
  • mclaren &lt; ---也应该接受(没有大写字母)

*我对内部的意思是,如果在开始或结束时没有任何大写字母。

previous version of my question只提供了C#解决方案,现在我想为同一目的设置一个正则表达式,以便从中学习。

4 个答案:

答案 0 :(得分:3)

一个正则表达式就足够了:

^[A-Za-z][a-z]{3,}$
  • ^表示文字的开头,
  • 后跟一个大写或小写字母
  • 后跟三个或更多小写字母
  • 后跟文本末尾($),即小写后的其他字母。

答案 1 :(得分:2)

这个简单的正则表达式应该这样做:

^[A-Za-z][a-z]{3,}$

启动后有任何大写字母失败。它允许至少4个字符,因为第一部分恰好匹配一个字符,第二部分至少匹配3.结合它至少匹配4个。

答案 2 :(得分:1)

^(?:[A-Z]|[a-z])[a-z]{3,}$

你可以使用它。参见演示。

https://regex101.com/r/eB8xU8/2

答案 3 :(得分:0)

你可以使用这个正则表达式:

^[a-zA-Z][a-z]{3,}
  • 第一个^是字符串的开头
  • [a-zA-Z]只匹配一个字母,无论是大写还是小写
  • [a-z]{3,}至少三封小写字母。