【问题标题】:Remove section of text using regex c#使用正则表达式 c# 删除文本部分
【发布时间】:2013-11-13 13:55:27
【问题描述】:

如何从包含标签的字符串块中删除 [Start] 和 [End] 之间的一段文本?

有没有比使用IndexOfSubstring 等更简单的方法?

更新:我正在尝试使用

var output = Regex.Replace("[Start]SomeText[End]", @"(?<=[Start]).*(?=[End])", "");

但是这种模式并不完全奏效。它需要删除 [Start] 和 [End] 之间的所有内容

输入文本: [开始] Hello World [结束]

输出文本: [开始][结束]

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    你可以试试这个:

    Regex rgx = new Regex(@"(?<=\[Start])(?s).+?(?=\[End])");
    string output = rgx.Replace(input, "");
    

    或者这样会更快:

    Regex rgx = new Regex(@"(?<=\[Start])(?>[^[]+|\[(?!End]))+(?=\[End])");
    string output = rgx.Replace(input, "");
    

    【讨论】:

    • 为什么第二个更快?
    • @Amicable:因为第一个使用惰性量词,并且必须检查每个字符是否有[End]。第二个必须检查后面是否有End],只有遇到的字符是[
    【解决方案2】:

    [] 是正则表达式中的特殊字符。

    var output =
       Regex.Replace("[Start]SomeText[End]", @"(?<=\[Start\]).*(?=\[End\])", ""); 
    

    【讨论】:

    • 请解释一下 - 你能举一个例子说明它没有按你的预期工作(以及你想要的结果是什么)?
    • 已更新,我以为您想“删除包含标签的一段文本 (...)”
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多