是否有使用正则表达式来检测字符串是否包含大写字符的替代方法?目前我正在使用以下正则表达式:
Regex.IsMatch(fullUri, "[A-Z]")
它工作正常,但我经常听到古老的格言“如果你使用正则表达式,你现在有两个问题”。
答案 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方法......