我正在为单词表制作过滤器。
所以这里有一些示例单词,它们在单词列表中:
var words = new List<string>();
var finalList = new List<string>();
words.Add("McLaren");//false
words.Add("Nissan");//true
words.Add("BMW");//false
words.Add("Subaru");//true
words.Add("Maserati");//true
words.Add("Mercedes Benz");//false
words.Add("Volkswagen");//true
words.Add("audi");//true
words.Add("Alfa Romeo");//false
words.Add("rollsRoyce");//false
words.Add("drive");//true
对于这个任务,我需要一个只接受字母的正则表达式(没有特殊字符,没有空格)。这些词必须包含至少4个无限的字符。它应该只接受字符串开头的大写字母。这就是我的问题所在。
这是我的代码:
var WordRegex = new Regex("^[a-zA-Z]{4,}$", RegexOptions.Compiled | RegexOptions.CultureInvariant);
var secondRegex = new Regex("([A-Z]{1})");
foreach (var word in words)
{
if (WordRegex.IsMatch(word) && secondRegex.Matches(word).Count == 1)
{
finalList.Add(word);
}
}
我遇到的问题是“&quot; lowerCase&#39;进入我不想要的finallist。如果大写字母位于字符串的开头,我只希望它进入finalList。
我的第二个正则表达式是阻止像麦克拉伦这样的词汇。因为它有两个大写字母。
再次:
*我对内部的意思是,如果在开始或结束时没有任何大写字母。
previous version of my question只提供了C#解决方案,现在我想为同一目的设置一个正则表达式,以便从中学习。
答案 0 :(得分:3)
一个正则表达式就足够了:
^[A-Za-z][a-z]{3,}$
^
表示文字的开头,$
),即小写后的其他字母。答案 1 :(得分:2)
这个简单的正则表达式应该这样做:
^[A-Za-z][a-z]{3,}$
启动后有任何大写字母失败。它允许至少4个字符,因为第一部分恰好匹配一个字符,第二部分至少匹配3.结合它至少匹配4个。
答案 2 :(得分:1)
答案 3 :(得分:0)
你可以使用这个正则表达式:
^[a-zA-Z][a-z]{3,}
^
是字符串的开头[a-zA-Z]
只匹配一个字母,无论是大写还是小写[a-z]{3,}
至少三封小写字母。