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

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

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

有什么想法吗? 谢谢!

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

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

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

*使用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; 

您可以使用正向前瞻来匹配字符串但不捕获它:

 (?=test) 

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

 ^.*(?=test) 

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

 ^.*?(?=test) 

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

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

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

如果要避免重复搜索词,可以使用零宽度正向前瞻断言 :

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