我试图想办法在Regex中匹配前删除字符串中的所有文本.我用C#编写代码.
例如,如果字符串是"hello,test matching",并且模式是"test",我希望最终结果是"test matching"(即在测试之前删除所有内容).
有什么想法吗?谢谢!
编辑:在阅读您的回复后,我可能应该在我的例子中更具体一点(并感谢他们).我喜欢前瞻方法,但我过度简化了我的例子.为了使事情变得更困难,通常字符串看起来像:
"你好,测试匹配测试一切后"
因此,如果我使用模式"test",它将捕获第一个.我的目标是在第二场比赛后替换所有文字.即:导致"测试一切后"......抱歉.
您可以使用正向前瞻来匹配字符串但不捕获它:
(?=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)", "");
*更新,使用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;   
| 归档时间: | 
 | 
| 查看次数: | 10839 次 | 
| 最近记录: |