C#如何删除字符串中两个感叹号!之间的任意位置内容
C# 删除成对感叹号及中间内容的实现方案
方案1:正则实现(代码最简洁)
直接使用正则非贪婪匹配成对的!以及两者之间的所有内容,统一替换为空字符串即可,不需要手动处理复杂的拼接逻辑。
需要先引入正则命名空间:using System.Text.RegularExpressions;
核心实现代码:
string test = "I am writing something here!Developer is trying something! bla bla bla " + "I am continue!Here is trying! developing."; // 正则规则:! 匹配开头感叹号,.*? 非贪婪匹配任意字符直到遇到最近的下一个! string cleanedStr = Regex.Replace(test, @"!.*?!", "");
运行后cleanedStr的输出完全符合预期:
I am writing something here bla bla bla I am continue developing.
方案2:Split+StringBuilder实现(无正则依赖)
如果项目场景不允许使用正则,也可以通过Split按单个!切分字符串后,只保留偶数索引的片段拼接即可。成对感叹号的固定结构为[保留内容]![要删除的内容]![保留内容]![要删除的内容]!...,切分后偶数位(0、2、4...)全是需要保留的内容。
实现代码:
using System.Text; // ... public static string CleanExclamationContent(string input) { if (string.IsNullOrWhiteSpace(input)) return input; string[] parts = input.Split('!'); StringBuilder sb = new StringBuilder(); // 步长设为2,只取偶数位片段 for (int i = 0; i < parts.Length; i += 2) { sb.Append(parts[i]); } return sb.ToString(); }
调用该方法传入原始字符串,同样能得到目标结果。
注意:如果输入字符串中感叹号总数为奇数(即存在未配对的单个感叹号),上述两种方案都会默认保留最后一个感叹号之后的所有内容,如果需要处理这种边界场景,可以在逻辑末尾补充判断最后一个感叹号的位置做截断即可。
内容的提问来源于stack exchange,提问作者Mehmet
相关产品推荐
相关产品推荐

