C# String操作:如何删除两个指定标记之间的全部字符
C# 删除指定标记区间内容的实现方案
你可以根据使用场景选择下面两种实现方式:
方法1:基础字符串操作(推荐大文本场景使用,性能更高)
通过索引定位两个标记的位置,直接截取拼接内容,避免正则的额外性能开销:
/// <summary> /// 删除两个标记之间的内容(默认连标记本身一起删除) /// </summary> /// <param name="input">原字符串</param> /// <param name="startMarker">起始标记</param> /// <param name="endMarker">结束标记</param> /// <returns>处理后的字符串</returns> public static string RemoveContentBetweenMarkers(string input, string startMarker = "//RemoveFromhere", string endMarker = "//RemoveTohere") { // 找不到起始标记直接返回原内容 int startIndex = input.IndexOf(startMarker); if (startIndex < 0) return input; // 从起始标记后找结束标记,找不到直接返回原内容 int endIndex = input.IndexOf(endMarker, startIndex + startMarker.Length); if (endIndex < 0) return input; // 要保留两个标记只删中间的话,把下行替换为 return input.Substring(0, startIndex + startMarker.Length) + input.Substring(endIndex); return input.Substring(0, startIndex) + input.Substring(endIndex + endMarker.Length); } // 调用示例 string originalStr = @"//RemoveFromhere <div> <p>my name is blawal i want to remove this div </p> </div> //RemoveTohere"; string processedStr = RemoveContentBetweenMarkers(originalStr);
方法2:正则表达式(适合简单场景,代码更简洁)
用正则非贪婪匹配实现,可直接匹配跨换行的内容:
using System.Text.RegularExpressions; string originalStr = @"//RemoveFromhere <div> <p>my name is blawal i want to remove this div </p> </div> //RemoveTohere"; // 连标记一起删除的写法 string processedStr = Regex.Replace(originalStr, @"//RemoveFromhere[\s\S]*?//RemoveTohere", string.Empty); // 要保留两个标记只删中间的写法 // string processedStr = Regex.Replace(originalStr, @"(?<=//RemoveFromhere)[\s\S]*?(?=//RemoveTohere)", string.Empty);
注意事项
- 正则的非贪婪匹配符
*?不可省略,否则存在多组标记时会匹配到最后一个结束标记,导致范围错误 - 处理MB级以上的大文本时,优先使用第一种字符串操作方案
内容的提问来源于stack exchange,提问作者blawal sarfraz
相关产品推荐
相关产品推荐

