在一个字符串中查找所有大写字母 - 正则表达式 C#

14

我需要在一个字符串中找到大写字母。例如:

输入Electronics and Communication Engineering

输出ECE


8
非常有趣!也许你想尝试一些东西。 - revo
3个回答

18

如果您坚持使用 正则表达式

 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)));

正则表达式和Linq哪个更高效? - Christlin Panneer
2
@Christlin Joseph:可能是Linq(在上下文中),因为它是直接的。 - Dmitry Bychenko
1
一种更短的方法是:string result = string.Concat(source.Where(char.IsUpper)); - dnl-blkv
@dnl-blkv: char.IsUpper(c)c >= 'A' && c <= 'Z' 是不同的条件:前者满足所有Unicode大写字母(比如俄语),而后者仅满足英文大写字母。我已经编辑了我的回答。 - Dmitry Bychenko

9

Linq解决方案示例在这里

Where扩展方法将帮助您从给定的字符串中获取大写字母。您可以使用String.JoinString.Concat(如DmitryBychenko所建议的那样)将最终输出作为字符串获取。请查看以下代码片段。

string inputStr = "Electronics and Communication Engineering";
string outputStr=String.Concat(inputStr.Where(x=>Char.IsUpper(x)));
Console.WriteLine(outputStr);

1
string.Concat(value) is a shorter version of String.Join("", value) - Dmitry Bychenko
@DmitryBychenko:哇,真的很好,感谢您的建议。 - sujith karivelil

4

使用LINQ:

string text = "Electronics and Communication Engineering";
var capitalLetters = text.Where(c => char.IsUpper(c)).ToArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接