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

key*_*oss 7 c# regex

我试图想办法在Regex中匹配前删除字符串中的所有文本.我用C#编写代码.

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

有什么想法吗?谢谢!

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

"你好,测试匹配测试一切后"

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

Don*_*ner 8

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

(?=test)
Run Code Online (Sandbox Code Playgroud)

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

^.*(?=test)
Run Code Online (Sandbox Code Playgroud)

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

^.*?(?=test)
Run Code Online (Sandbox Code Playgroud)


Hei*_*nzi 5

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

newString = Regex.Replace(oldString, "^.*test", "test");
Run Code Online (Sandbox Code Playgroud)

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

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

newString = Regex.Replace(oldString, "^.*(?=test)", "");
Run Code Online (Sandbox Code Playgroud)


Sta*_*age 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;   
Run Code Online (Sandbox Code Playgroud)