You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 14:30:59