我正在尝试编写一个匹配句子第二个单词的正则表达式。
到目前为止我所拥有的是
\s+[^\s]+
匹配
快速棕色狐狸跳过懒狗
不幸的是,我无法想出一个能够消除领先空白区域的解决方案。
有关示例,请参阅http://regex101.com/r/nB9yD9
那么,是否有一种简单的方法可以在没有空格的情况下匹配“快速”?这里选择的武器是C#,如果它有任何区别的话。
它必须是正则表达式,我知道String.Split
在这种特定情况下会更好。
在旁注中,是否可以匹配正则表达式中的第n个单词?对于我所知道的正则表达式无法分组到未知数量的组中,这是正确的吗?
编辑:我的例子中有一个拼写错误。我放在那里的下划线意在突出白色空间。
答案 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