正则表达式在空格之间找到一个或多个单词

时间:2012-12-11 11:56:18

标签: c# regex

我想找到空格之间的句子中的单词。所以直到搜索词之前和之后的第一个空格的单词

如果我的搜索字词是This is anexampleof what I want

,则

anexampleof应该返回example

我现在有这个正则表达式"(?:^|\S*\s*)\S*" + searchword + "\S*(?:$|\s*\S*)"但是这在开头和结尾给了我一个额外的词。 '这是我想要的例子' - > return'是'

的示例

我试图改变正则表达式,但我根本不擅长... 我正在使用c#。谢谢你的帮助。

完整的C#代码:

MatchCollection m1 = Regex.Matches(content, @"(?:^|\S*\s*)\S*" + searchword + @"\S*(?:$|\s*\S*)",
                              RegexOptions.IgnoreCase | RegexOptions.Multiline);

1 个答案:

答案 0 :(得分:3)

您可以在最后省略非捕获组:

@"\S*" + searchword + @"\S*";

由于贪婪,你会在每一侧获得尽可能多的非空格字符。

此外,非捕获组的想法不是,它们不包含在匹配中。他们所做的只是制作子匹配的捕获。如果您想检查是否有某些内容,但又不想将其包含在匹配项中,则需要lookarounds

@"(?<=^|\S*\s*)\S*" + searchword + @"\S*(?=$|\s*\S*)"

然而,在这种情况下,这些外观并没有真正起作用,因为\s*\S*对空字符串感到满意(因为*使两个字符都可选)。但是只是为了进一步参考...如果你想在你的比赛的边界做出断言,这不应该是比赛的一部分......看起来就是可行的方式。