正则表达式+删除匹配前的所有文本

时间:2012-01-12 19:31:27

标签: c# regex

我正试图找出一种在Regex中匹配之前删除字符串中所有文本的方法。我用C#编写代码。

例如,如果字符串是“hello,test matching”,并且模式是“test”,我希望最终结果是“test matching”(即在测试之前删除所有内容)。

有什么想法?谢谢!

编辑:在阅读你的回复之后我可能应该在我的例子中更具体一点(并感谢他们)。我喜欢前瞻方法,但我过度简化了我的例子。为了使事情变得更加困难,通常字符串看起来像:

“你好,测试匹配测试一切后”

因此,如果我使用模式“test”,它将捕获第一个。我的目标是在第二场比赛后替换所有文字。即:导致“测试一切后”......对此抱歉。

3 个答案:

答案 0 :(得分:8)

您可以使用positive lookahead匹配字符串但不捕获字符串:

(?=test)

所以你想在最后一次测试之前捕获这些东西:

^.*(?=test)

如果你想让它成为第一次出现的测试,请使用延迟匹配:

^.*?(?=test)

答案 1 :(得分:5)

对于一个简单的解决方案,只需将“ start-of-line 任何测试”替换为“test”:

newString = Regex.Replace(oldString, "^.*test", "test");

由于*贪婪,这将尽可能地取代,即a test b test c将成为test c。要尽可能少地替换,请使用*?代替*

如果您想避免重复搜索词,可以使用Zero-width positive lookahead assertion

newString = Regex.Replace(oldString, "^.*(?=test)", "");

答案 2 :(得分:1)

*使用matchcollection

更新
string test = "hello, test matching";

string regexStrTest;
regexStrTest = @"test\s\w+";       
MatchCollection m1 = Regex.Matches(test, regexStrTest);
//gets the second matched value
string value = m1[1].Value;