使用RegEx查找没有数字的所有单词

时间:2011-04-22 11:38:47

标签: c# .net regex

我发现这段代码可以获取字符串的所有单词,

static string[] GetWords(string input)
{
    MatchCollection matches = Regex.Matches(input, @"\b[\w']*\b");

    var words = from m in matches.Cast<Match>()
                where !string.IsNullOrEmpty(m.Value)
                select TrimSuffix(m.Value);

    return words.ToArray();
}

static string TrimSuffix(string word)
{
    int apostrapheLocation = word.IndexOf('\'');
    if (apostrapheLocation != -1)
    {
        word = word.Substring(0, apostrapheLocation);
    }

    return word;
}
  1. 请描述一下代码。
  2. 如何获得没有数字的单词?

2 个答案:

答案 0 :(得分:3)

  

2如何获得没有数字的单词?

您必须将\w替换为[A-Za-z]

以便您的RegEx成为@"\b[A-Za-z']*\b"

然后你将不得不考虑TrimSuffix()。 regEx允许使用撇号,但TrimSuffix()仅提取左侧部分。所以“它的”将成为“它”。

答案 1 :(得分:2)

MatchCollection matches = Regex.Matches(input, @"\b[\w']*\b");

代码正在使用正在查找任何单词的正则表达式; \ b表示单词的边框,\ w是字母数字POSIX类,用于将所有内容都作为字母(带或不带图形重音符号),数字,有时还有下划线,'只是包含在列表中以及alphaNum。所以基本上就是搜索单词的开头和结尾并选择它。

然后

var words = from m in matches.Cast<Match>()
                    where !string.IsNullOrEmpty(m.Value)
                    select TrimSuffix(m.Value);

是一种LINQ语法,您可以在代码中执行类似SQL的查询。该代码从正则表达式中获取每个匹配项并检查该值是否为空并且不使用空格。它也是你可以添加图形验证的地方。

和这:

static string TrimSuffix(string word)
    {
        int apostrapheLocation = word.IndexOf('\'');
        if (apostrapheLocation != -1)
        {
            word = word.Substring(0, apostrapheLocation);
        }

        return word;
    }

正在删除拥有它的单词并且只获取它之前的部分

即。 一词只会获得 don