正则表达式匹配句子的第二个单词并修剪前导空格

时间:2014-02-18 07:09:12

标签: c# regex

我正在尝试编写一个匹配句子第二个单词的正则表达式。

到目前为止我所拥有的是

\s+[^\s]+

匹配

  

快速棕色狐狸跳过懒狗

不幸的是,我无法想出一个能够消除领先空白区域的解决方案。

有关示例,请参阅http://regex101.com/r/nB9yD9

那么,是否有一种简单的方法可以在没有空格的情况下匹配“快速”?这里选择的武器是C#,如果它有任何区别的话。

它必须是正则表达式,我知道String.Split在这种特定情况下会更好。

在旁注中,是否可以匹配正则表达式中的第n个单词?对于我所知道的正则表达式无法分组到未知数量的组中,这是正确的吗?

编辑:我的例子中有一个拼写错误。我放在那里的下划线意在突出白色空间。

2 个答案:

答案 0 :(得分:1)

您使用的正则表达式是正确的。要绕过您的问题,您可以使用capture groups,如下所示:

        string str = "The quick brown fox jumps over the lazy dog";
        Regex r = new Regex(@"\s+([^\s]+)");
        Match m = r.Match(str);
        System.Console.WriteLine(m.Groups[1]);

这将产生quick,没有尾随空格。

或者,您也可以在结果上使用trim()方法。

另外,根据您的附注,您可以通过组合C#和正则表达式来匹配给定句子的nth单词,这样就可以满足您的需要:

        string str = "The quick brown fox jumps over the lazy dog";
        Regex r = new Regex(@"(^|\s)+([^\s]+)");
        MatchCollection mc = r.Matches(str);                        
        for (int i = 0; i < mc.Count; i++)
        {
            System.Console.WriteLine(mc[i].Groups[2]);
        } 

收率:

The
quick
brown
fox
jumps
over
the
lazy
dog

我必须对正则表达式进行修改,以便考虑第一个字。这允许正则表达式选择前面有空格的单词,或者字符串的开头。

根据您的评论,请查看this链接。

答案 1 :(得分:1)

string str = "The quick brown fox jumps over the lazy dog";
Regex r = new Regex(@"\w+");  //Find words

MessageBox.Show(r.Matches(str)[1].Value); // Get all words and show value at 1st position