首页 文章

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

提问于
浏览
0

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

到目前为止我所拥有的是什么

\s+[^\s]+

哪个匹配

快速的棕色狐狸跳过懒狗

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

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

那么,有没有一种简单的方法来匹配“快速”而没有白色空间?这里选择的武器是C#,如果它有任何区别的话 .

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

另外,是否可以匹配正则表达式中第n个单词?对于我所知道的正则表达式不能组成一个未知数量的组,这是正确的吗?

EDIT :我的例子中有一个拼写错误 . 我放在那里的下划线意在强调白色空间 .

2 回答

  • 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
    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
    

相关问题