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

xurqigkl  于 2023-08-08  发布在  其他
关注(0)|答案(8)|浏览(104)

是否有使用正则表达式检测字符串是否包含大写字符的替代方法?下面是一个正则表达式:

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

字符串
它工作得很好,但我经常听到一句老话:“如果你使用正则表达式,你现在有两个问题”。

fnvucqvd

fnvucqvd1#

你可以使用LINQ:

fullUri.Any(char.IsUpper);

字符串

p8ekf7hl

p8ekf7hl2#

RegEx似乎有点过头了:

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

字符串

mm5n2pyu

mm5n2pyu3#

你也可以这样做(如果你想在.NET 1.0中工作的话:):

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

字符串
尽管如此简单的正则表达式可能工作正常

gblwokeq

gblwokeq4#

使用LINQ

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

字符串

f3temu5u

f3temu5u5#

你的正则表达式只会找到ASCII大写字母。方便的是,.NET正则表达式引擎是Unicode感知的,使您能够

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

字符串
尽管我认为在您的情况下,您不希望字符串中包含非ASCII字母(考虑到其名称)。

iyzzxitl

iyzzxitl6#

使用 for 循环,它不像其他方法那样高效和可读,但对于初学者来说,它应该可以工作并提供一种全面的方法来做到这一点:

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

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

hc2pp10m

hc2pp10m7#

使用大型字符串时,使用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;
    }
}

字符串

x8goxv8g

x8goxv8g8#

用途:

string text = "Hello, World!";
char[] Letters = text.ToCharArray();
IEnumerable Sentence = from l in Letters where char.IsUpper(l) select l;
IEnumerator enumerator = Sentence.GetEnumerator();
while (enumerator.MoveNext())
{
    return true;
}
return false;

字符串

相关问题