如何使用C#从字符串中单独检查/过滤大写单词?

时间:2011-03-11 07:30:27

标签: c# .net linq .net-4.0

如何使用C#从字符串中单独检查/过滤大写单词? 我不想通过循环一个单词的每个字母来使用“Char.IsUpper()”来检查相同的大写字母。 有没有办法很简单的代码来完成这项任务?与LINQ等。?

6 个答案:

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