正则表达式+删除匹配前的所有文本
我试图找出一种方法来删除正则表达式匹配前字符串中的所有文本。 我用C#编写代码。
例如,如果字符串是“hello,test matching”,并且模式是“test”,我希望最终结果是“test matching”(即在测试之前删除所有内容)。
有什么想法吗? 谢谢!
编辑:在阅读您的回复之后,我可能应该在我的示例中更具体一些(并感谢他们)。 我喜欢前瞻方法,但我简化了我的例子。 为了使事情变得更加困难,通常字符串看起来像:
“你好,测试匹配测试一切后”
因此,如果我使用模式“test”,它将捕获第一个。 我的目标是在第二场比赛后替换所有文字。 即:导致“测试一切后”……抱歉。
*使用matchcollection更新
string test = "hello, test matching"; string regexStrTest; regexStrTest = @"testsw+"; 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
。 要尽可能少地更换,请使用*?
而不是*
。
如果要避免重复搜索词,可以使用零宽度正向前瞻断言 :
上述就是C#学习教程:正则表达式+删除匹配前的所有文本分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)
newString = Regex.Replace(oldString, "^.*(?=test)", "");
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1014221.html