检查一个大写字母是不是在字符串中
Posted
技术标签:
【中文标题】检查一个大写字母是不是在字符串中【英文标题】:Check if an uppercase Letter is inside a string检查一个大写字母是否在字符串中 【发布时间】:2016-05-14 04:05:49 【问题描述】:我目前正在学习 C# 和 RegEx
。我正在开发一个小型 wordcrawler。我得到了很多单词的大列表,其中我逃避了那些不适合我的 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 中。但是,如果单词类似于“***”(一个大写字母,但不在字符串的开头),它确实会进入决赛名单。有什么简单的方法可以防止这个问题吗?
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',它应该被接受。所以我必须检查字符串中是否有大写字母。
【问题讨论】:
您尝试实施的过滤规则是什么?从你的问题看不清楚。 我不确定你想用你的 if 语句实现什么,但我不认为它会完全按照你的想法做,因为运算符优先级(&& 在 | |)。可能是。无论如何:msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx 【参考方案1】:如果您想检查字符串是否包含大写字母 - 这是我的方法
string sValue = "***";
bool result = !sValue.Any(x => char.IsUpper(x));
更新更新的问题
string sValue = "***";
bool result = sValue.Where(char.IsUpper).Skip(1).Any();
这将忽略第一个字符并确定字符串的其余部分是否包含至少一个大写字母
【讨论】:
可以简化为bool result = sValue.Any(char.IsUpper)
【参考方案2】:
有一个非常简单的解决方案,无需 regex 或 linq:
bool hasUppercase = !str.equals(str.toLowerCase());
现在您可以轻松检查:
if(!hasUppercase)
// no uppercase letter
else
// there is an uppercase letter
只是检查字符串是否等于它的小写自我。
【讨论】:
我想知道为什么这会被接受,因为它既没有回答 OP 在标题中提出的问题,也没有回答问题本身(“不包含或包含一个大写字母,但不包含更多”)。 问题已编辑。这个答案最初是适用的。显然我自己没有接受这个...... /:以上是关于检查一个大写字母是不是在字符串中的主要内容,如果未能解决你的问题,请参考以下文章
在 Ruby 中,我可以在不使用正则表达式的情况下检查字符串是不是包含字母吗?