【发布时间】: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 中。但是,如果单词类似于“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',它应该被接受。所以我必须检查字符串中是否有大写字母。
【问题讨论】:
-
您尝试实施的过滤规则是什么?从你的问题看不清楚。
-
我不确定你想用你的 if 语句实现什么,但我不认为它会完全按照你的想法做,因为运算符优先级(&& 在 | |)。可能是。无论如何:msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx
标签: c# regex list match .net-4.5