簡體   English   中英

檢查字符串中是否包含大寫字母

[英]Check if an uppercase Letter is inside a string

我目前正在學習C#和RegEx 我正在做一個小型的爬蟲器。 我得到了很多單詞的大清單,在其中我逃避了那些不適合我的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中,因此效果很好。 但是,如果這些單詞類似於“ stackOverflow”(一個大寫字母,但不在字符串開頭),它會將其帶入最終列表。 有什么簡單的方法可以防止此問題?

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 = "stackOverflow";
bool result = !sValue.Any(x => char.IsUpper(x));

更新到更新的問題

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

這將忽略第一個字符,並確定字符串的其余部分是否至少包含一個大寫字母

沒有regex或linq,有一個非常簡單的解決方案:

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

現在您可以輕松檢查:

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

else {
    // there is an uppercase letter
}

僅檢查字符串是否等於其小寫的self。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM