我想找到空格之间的句子中的单词。所以直到搜索词之前和之后的第一个空格的单词
如果我的搜索字词是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);
答案 0 :(得分:3)
您可以在最后省略非捕获组:
@"\S*" + searchword + @"\S*";
由于贪婪,你会在每一侧获得尽可能多的非空格字符。
此外,非捕获组的想法不是,它们不包含在匹配中。他们所做的只是制作子匹配的捕获。如果您想检查是否有某些内容,但又不想将其包含在匹配项中,则需要lookarounds:
@"(?<=^|\S*\s*)\S*" + searchword + @"\S*(?=$|\s*\S*)"
然而,在这种情况下,这些外观并没有真正起作用,因为\s*\S*
对空字符串感到满意(因为*
使两个字符都可选)。但是只是为了进一步参考...如果你想在你的比赛的边界做出断言,这不应该是比赛的一部分......看起来就是可行的方式。