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

C#如何实现移除所有特殊字符仅保留下划线的功能

最优实现方案(正则表达式版)

你要的功能用正则实现是性能和简洁度最优的方案,完全可以替代你现在写的数十个链式Replace调用:

首先需引入正则命名空间:

using System.Text.RegularExpressions;

优化后的完整代码:

// 预编译正则对象,重复调用时无需重复解析正则,性能更好
private static readonly Regex _sanitizeRegex = new Regex(@"[^a-zA-Z0-9_]", RegexOptions.Compiled);

public static string SanitizeImportName(string importName)
{
    if (string.IsNullOrWhiteSpace(importName))
    {
        throw new ArgumentNullException(nameof(importName));
    }
    return _sanitizeRegex.Replace(importName, string.Empty);
}

规则说明

正则 @"[^a-zA-Z0-9_]" 的逻辑非常清晰:

  • 方括号开头的 ^ 代表否定匹配,也就是匹配所有不在后面规则范围内的字符
  • 规则内包含大小写英文字母、数字、你要保留的下划线_
  • 所有匹配到的非允许字符都会被替换为空字符串,完美覆盖你要清除特殊字符的需求

如果后续需要新增保留的字符,直接在方括号里加对应规则即可,比如要保留中文就改成 @"[^a-zA-Z0-9_\u4e00-\u9fa5]" 就行。

对比你原来的链式Replace方案,正则方案不仅代码简洁,还能覆盖到你没列全的特殊字符(比如全角符号、emoji等),容错性和性能都高很多。

内容的提问来源于stack exchange,提问作者user272727

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:00:02