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

Check if string contains a uppercase letter "inside" it

我正在为单词列表开发过滤器。

下面是一些单词列表中的示例单词:

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);
    }
}

我遇到的问题是 'lowerCase' 这个词进入了我不想要的决赛名单。如果大写字母位于字符串的开头,我只希望它进入 finalList。

我的第二个正则表达式阻止了像 'McLaren' 这样的词,因为它有两个大写字母。

再次:

*我在里面的意思是如果有任何大写字母不在开头或结尾。

只给出了 C# 解决方案,现在我想有一个正则表达式用于同样的目的,向它学习。

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

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

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

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

开头后面没有大写字母失败。它总共允许至少 4 个字符,因为第一部分恰好匹配一个字符,第二部分至少匹配 3 个。组合起来至少匹配 4 个。

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

您可以使用 this.See 演示。

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

一个正则表达式就够了:

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