如何使用C#从字符串中单独检查/过滤大写单词? 我不想通过循环一个单词的每个字母来使用“Char.IsUpper()”来检查相同的大写字母。 有没有办法很简单的代码来完成这项任务?与LINQ等。?
答案 0 :(得分:7)
这个怎么样?
string test = "This IS a STRING";
var upperCaseWords = test.Split(' ').Where( w => w == w.ToUpper());
upperCaseWords现在包含字符串中的所有大写单词。
答案 1 :(得分:1)
您可以使用正则表达式:
using System.Text.RegularExpressions;
string input = "hello hi HELLO hi HI";
MatchCollection matches = Regex.Matches(" " + input + " ", @" [A-Z]* ");
foreach (Match m in matches)
{
MessageBox.Show(m.Value);
}
编辑:要处理第一个/最后一个单词全部大写的情况,您可以在输入字符串的每一侧添加一个空格。我已经更新了上面的例子。
答案 2 :(得分:1)
使用序数字符串比较可以使比较更快:unicode,每字节字节数,不需要特定于文化的检查。
// the TEST string
var result = input
.Split(' ')
.Where(w => String.Equals(w, w.ToUpper(), StringComparison.Ordinal));
// TEST
答案 3 :(得分:0)
你的意思是:String.ToUpper()?
编辑:好的,对不起我误解了这个问题。
答案 4 :(得分:0)
你只想要字符串中的大写单词,呵呵?
也许是这样的?
var upperCaseWords = from w in Regex.Split(text, @"\s+")
where char.IsUpper(w[0])
select w;
如果你想要全部大写字母的单词(如THIS),你可以使用基本相同的方法,只使用不同的谓词:
var upperCaseWords = from w in Regex.Split(text, @"\s+")
where w.All(c => char.IsUpper(c))
select w;
答案 5 :(得分:0)
您可以使用正则表达式执行此操作:http://oreilly.com/windows/archive/csharp-regular-expressions.html
查找首字母大写的所有单词
string t17 = "This is A Test of Initial Caps";
string p17 = @"(\b[^\Wa-z0-9_][^\WA-Z0-9_]*\b)";
MatchCollection mc17 = Regex.Matches(t17, p17);
查找所有上限词
string t15 = "This IS a Test OF ALL Caps";
string p15 = @"(\b[^\Wa-z0-9_]+\b)";
MatchCollection mc15 = Regex.Matches(t15, p15);