我需要在一个字符串中找到大写字母。例如:
输入: Electronics and Communication Engineering
输出: ECE
如果您坚持使用 正则表达式:
string source = @"Electronics and Communication Engineering";
string result = string.Concat(Regex
.Matches(source, "[A-Z]")
.OfType<Match>()
.Select(match => match.Value));
Linq是一个(更短的)替代方案:
string result = string.Concat(source.Where(c => c >= 'A' && c <= 'Z'));
编辑: 如果 "大写字母" 包括 所有的 Unicode 大写字母,不仅仅是英文,还有例如俄语的大写字母,那么 正则表达式 将使用不同的模式
string result = string.Concat(Regex
.Matches(source, @"\p{Lu}")
.OfType<Match>()
.Select(match => match.Value));
而 Linq 解决方案将使用不同的条件:
string result = string.Concat(source.Where(c => char.IsUpper(c)));
string result = string.Concat(source.Where(char.IsUpper));
- dnl-blkvchar.IsUpper(c)
和 c >= 'A' && c <= 'Z'
是不同的条件:前者满足所有Unicode大写字母(比如俄语),而后者仅满足英文大写字母。我已经编辑了我的回答。 - Dmitry BychenkoLinq解决方案示例在这里:
Where
扩展方法将帮助您从给定的字符串中获取大写字母。您可以使用String.Join
或String.Concat
(如DmitryBychenko所建议的那样)将最终输出作为字符串获取。请查看以下代码片段。
string inputStr = "Electronics and Communication Engineering";
string outputStr=String.Concat(inputStr.Where(x=>Char.IsUpper(x)));
Console.WriteLine(outputStr);
string.Concat(value)
is a shorter version of String.Join("", value)
- Dmitry Bychenko使用LINQ:
string text = "Electronics and Communication Engineering";
var capitalLetters = text.Where(c => char.IsUpper(c)).ToArray();