检查字符串是否包含大写字母 "inside" 它
Check if string contains a uppercase letter "inside" it
我正在为单词列表开发过滤器。
下面是一些单词列表中的示例单词:
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);
}
}
我遇到的问题是 'lowerCase' 这个词进入了我不想要的决赛名单。如果大写字母位于字符串的开头,我只希望它进入 finalList。
我的第二个正则表达式阻止了像 'McLaren' 这样的词,因为它有两个大写字母。
再次:
- McLaren <--- 不应接受(两个大写字母)
- mcLaren <--- 不应接受(大写字母“inside”* string)
- Mclaren <--- 应该接受(开头大写)
- mclaren <--- 也应该接受(没有大写字母)
*我在里面的意思是如果有任何大写字母不在开头或结尾。
只给出了 C# 解决方案,现在我想有一个正则表达式用于同样的目的,向它学习。
你可以采用这个正则表达式:
^[a-zA-Z][a-z]{3,}
- 第一个
^
是字符串的开始
[a-zA-Z]
匹配一个字母,不管是大写还是小写
[a-z]{3,}
至少三个小写字母。
这个简单的正则表达式应该做的:
^[A-Za-z][a-z]{3,}$
开头后面没有大写字母失败。它总共允许至少 4 个字符,因为第一部分恰好匹配一个字符,第二部分至少匹配 3 个。组合起来至少匹配 4 个。
^(?:[A-Z]|[a-z])[a-z]{3,}$
您可以使用 this.See 演示。
一个正则表达式就够了:
^[A-Za-z][a-z]{3,}$
^
表示正文开始,
- 后跟一个大写或小写字母,
- 后跟三个或更多小写字母
- 后跟正文结尾(
$
),即小写字母后没有其他字母。
我正在为单词列表开发过滤器。
下面是一些单词列表中的示例单词:
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);
}
}
我遇到的问题是 'lowerCase' 这个词进入了我不想要的决赛名单。如果大写字母位于字符串的开头,我只希望它进入 finalList。
我的第二个正则表达式阻止了像 'McLaren' 这样的词,因为它有两个大写字母。
再次:
- McLaren <--- 不应接受(两个大写字母)
- mcLaren <--- 不应接受(大写字母“inside”* string)
- Mclaren <--- 应该接受(开头大写)
- mclaren <--- 也应该接受(没有大写字母)
*我在里面的意思是如果有任何大写字母不在开头或结尾。
你可以采用这个正则表达式:
^[a-zA-Z][a-z]{3,}
- 第一个
^
是字符串的开始 [a-zA-Z]
匹配一个字母,不管是大写还是小写[a-z]{3,}
至少三个小写字母。
这个简单的正则表达式应该做的:
^[A-Za-z][a-z]{3,}$
开头后面没有大写字母失败。它总共允许至少 4 个字符,因为第一部分恰好匹配一个字符,第二部分至少匹配 3 个。组合起来至少匹配 4 个。
^(?:[A-Z]|[a-z])[a-z]{3,}$
您可以使用 this.See 演示。
一个正则表达式就够了:
^[A-Za-z][a-z]{3,}$
^
表示正文开始,- 后跟一个大写或小写字母,
- 后跟三个或更多小写字母
- 后跟正文结尾(
$
),即小写字母后没有其他字母。