检查大写字母是否在字符串中

Check if an uppercase Letter is inside a string

我目前正在学习 C# 和 RegEx。我正在研究一个小型的文字爬虫。我得到了一个包含许多单词的大列表,其中我将那些不适合我的正则表达式的单词转义了。

这是我的代码:

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

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

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

因此,如果单词是 'McLaren'(两个大写字母),它就可以正常工作,它不会将其添加到 finalList。但如果单词类似于 'Whosebug'(一个大写字母但不在字符串的开头),它确实会进入决赛。有什么简单的方法可以避免这个问题吗?

PS:如果有比 RegEx 更好的方法请告诉我!

这里有一些例子:

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

为true的应该接受,其他不应该接受。

我想达到的是,当正则表达式像这样写'rollsRoyce'时不应该添加,但如果它像'Rollsroyce'或'RollsRoyce'那样写应该被接受。所以我必须检查字符串中是否有大写字母。

如果您想检查字符串是否包含大写字母 - 这将是我的方法

string sValue = "Whosebug";
bool result = !sValue.Any(x => char.IsUpper(x));

更新更新问题

string sValue = "Whosebug";
bool result = sValue.Where(char.IsUpper).Skip(1).Any();

这将忽略第一个字符并确定字符串的其余部分是否至少包含一个大写字母

有一个非常简单的解决方案,无需正则表达式或 linq:

bool hasUppercase = !str.equals(str.toLowerCase());

现在您可以轻松查看:

if(!hasUppercase) {
    // no uppercase letter
}

else {
    // there is an uppercase letter
}

只是检查字符串是否等于其小写的自身。