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
相关产品推荐
相关产品推荐

