C# 中使用正则表达式转义字符串中的特殊字符

Dylan
Dylan
发布时间:2026-10-14| 2人浏览过
原创

在处理需要动态构建正则表达式的场景时,原始字符串中的特殊符号(如 *, ., [] 等)会被解析器误认为是规则指令。为解决这一问题,我们需要遍历并转义这些字符。以下代码展示了如何通过 System.Text.RegularExpressions 库实现这一功能。

结果与目标

输入任意包含正则元字符的文本,输出一个经过转义、可直接作为正则表达式使用的字符串。例如:将 [Test].html 转换为 \[Test\]\.html。

准备条件

  • 命名空间:确保引入 System.Text.RegularExpressions 和 System.Collections.Generic。
  • 环境:支持 C# 语言的 .NET 框架或 .NET Core/5+ 版本。

真实操作顺序

第1步:预处理反斜杠

目的:防止后续步骤对反斜杠 \ 的处理导致双重转义或逻辑混乱。

动作:在开始之前,首先将所有现有的单一反斜杠替换为双反斜杠。

input = input.Replace("\\", "\\\\");

说明:如果不先处理 \,当后续逻辑尝试添加转义符时,可能会意外产生 \\ 进而被再次误判,或者导致原有含义丢失。此步骤确保了基准状态一致。

第2步:定义正则匹配规则

入口:创建一个新的 Regex 实例。

参数:定义需要捕获的元字符集合:* . ? + $ ^ [] () {} | /。注意,部分字符在字符组内可能需要额外转义,但在此简化的列举中,我们通过明确的字面量列表来识别。

Regex r = new Regex("[\\*\\.\\?\\+\\$\\^\\[\\]\\(\\)\\{\\}\\|\\/]" );

完成状态:r 对象已准备好扫描输入流。

第3步:批量识别与去重

动作:使用 r.Matches(input) 获取所有匹配项,并维护一个 List<string> 用于记录已处理的字符值,避免重复替换相同类型的符号导致索引偏移错误或性能浪费。

MatchCollection ms = r.Matches(input);
List list = new List();

第4步:执行转义替换

操作:遍历匹配集合,对于每个未处理过的匹配值 item.Value:

  1. 检查 list 是否已包含该值,若包含则跳过。
  2. 调用 input.Replace(item.Value, "\\" + item.Value) 进行局部替换。
  3. 将该值加入 list 备案。

注意:这种方式依赖于简单的字符串替换。对于复杂嵌套或上下文敏感的转义需求,建议使用更严谨的正则重构方法(如 Regex.Escape 的自定义扩展),但在特定子串过滤场景下此方法有效。

第5步:返回结果

动作:函数结束,返回处理后的 input 字符串。

完整代码参考

复制代码 代码如下:
/// <summary>
/// 转义字符串中所有正则特殊字符
/// </summary>
/// <param name="input">传入字符串</param>
/// <returns>转义后的字符串</returns>
string FilterString(string input)
{
    // 第一步:优先处理反斜杠,避免冲突
    input = input.Replace("\\", "\\\\"); 
    
    // 第二步:定义需要转义的元字符正则集
    // 涵盖了常见元字符,具体可根据实际需求增减
    Regex r = new Regex("[\\*\\.\\?\\+\\$\\^\\[\\]\\(\\)\\{\\}\\|\\/]");
    
    MatchCollection ms = r.Matches(input);
    List list = new List();
    
    // 第三步 & 第四步:遍历并替换
    foreach (Match item in ms)
    {
        // 如果该字符已经处理过,跳过以防干扰
        if (list.Contains(item.Value))
            continue;
            
        // 执行转义:在字符前添加 \n        input = input.Replace(item.Value, "\\" + item.Value);
        
        // 标记为已处理
        list.Add(item.Value);
    }
    
    return input;
}

简要总结

通过预先清理反斜杠并使用特定的正则模式匹配其余元字符,可以可靠地将普通文本转化为安全的正则表达式字面量。该方法适用于需要对用户输入或非结构化数据进行正则匹配前的预处理场景。

以上就是C#转义字符串中的所有正则特殊字符方法示例的详细内容,更多关于C#正则转义的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。