检测字符串是否包含大写字符

时间:2013-11-17 15:26:13

标签: c# regex string

是否有使用正则表达式来检测字符串是否包含大写字符的替代方法?目前我正在使用以下正则表达式:

Regex.IsMatch(fullUri, "[A-Z]") 

它工作正常,但我经常听到古老的格言“如果你使用正则表达式,你现在有两个问题”。

7 个答案:

答案 0 :(得分:74)

您可以使用LINQ:

fullUri.Any(char.IsUpper);

答案 1 :(得分:19)

RegEx似乎有点矫枉过正:

bool containsAtLeastOneUppercase = fullUri.Any(char.IsUpper);

答案 2 :(得分:10)

您可能也可以这样做(如果您想要在.NET 1.0中运行的东西:):

bool hasUpperCase = !fullUri.ToLower().Equals(fullUri);

虽然这个简单的正则表达式可能会正常工作

答案 3 :(得分:10)

使用Linq!

fullUri.Any(c=> char.IsUpper(c));

答案 4 :(得分:3)

你的正则表达式只会找到ASCII大写字母。方便的是,.NET正则表达式引擎支持Unicode,使您可以

Regex.IsMatch(fullUri, @"\p{Lu}") 

虽然我认为在你的情况下你不希望你的字符串中有非ASCII字母(考虑它的名字)。

答案 5 :(得分:0)

在使用大字符串时,使用LINQ可能会影响性能。您还可以使用ASCII级别比较。

byte[] asciiBytes = Encoding.ASCII.GetBytes(fullUri);
for (int i = 0; i < asciiBytes.Length; i++)
{
    if (asciiBytes[i] > 64 && asciiBytes[i] < 91)
    {
        return true;
    }
}

答案 6 :(得分:-1)

使用for循环,不如其他方法指出的那样有效和可读,但对于初学者应该工作并提供一种全面的方法:

int counter = 0;
for(int i=0; i< myString.Length;i++)
    {
        //if character is upper add +1 to counter
        if(char.IsUpper(chaineNonPascale[i]))
        {
            counter++;
        }
    }

基本上,你迭代你的字符串并检查上层字符,然后你可以添加逻辑,了解如何处理有上层字符的地方。例如,插入一个找到第二个大写字母char的空格,然后在整个字符串上使用ToLower方法......