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

如何忽略输入数组中的正则元字符,实现字符串精确匹配分割?

解决正则分隔符中元字符的转义问题

你的核心需求是让分隔符里的正则元字符(比如.、|)被当作普通字符串处理,同时保留手动添加的|作为“或”逻辑,直接用Regex.Escape()就能搞定这个问题。

修改后的代码

先对每个分隔符做转义处理,再用|拼接成正则表达式:

List<string> RxltOut = new List<string>();

string[] WordsList = { "ab.c.d",  "a.b.cd", "a|b.cd.x|z"};
string[] RgxSplits = { "cd", "ab", "a|b", "a.b" }; // 包含元字符的分隔符

// 转义每个分隔符后再用|连接,保留"或"逻辑
string RgxSplit2BU = string.Join("|", RgxSplits.Select(s => Regex.Escape(s)));

foreach (var _word in WordsList)
{ RxltOut.AddRange(Regex.Split(_word, RgxSplit2BU, RegexOptions.IgnoreCase)); }

foreach (var x in RxltOut) { Console.WriteLine(x); }

原理说明

  • Regex.Escape()会自动把字符串里的所有正则元字符(比如.匹配任意字符、|表示分支)转义成字面量,比如a|b会被转成a\|b,a.b会被转成a\.b,这样正则引擎就会把它们当作普通字符串匹配,不会解析成正则语法。
  • 转义后用|连接,就实现了“匹配任意一个分隔符字面量”的逻辑,完全符合你的需求。

备选策略

如果不想用正则分割,也可以用字符串替换+分割的方式实现:

  1. 选一个原字符串中绝对不会出现的标记(比如###SPLIT###)。
  2. 遍历所有分隔符,把原字符串中匹配到的分隔符(忽略大小写)替换成这个标记。
  3. 最后用标记分割字符串。
    示例代码:
List<string> RxltOut = new List<string>();
string[] WordsList = { "ab.c.d",  "a.b.cd", "a|b.cd.x|z"};
string[] RgxSplits = { "cd", "ab", "a|b", "a.b" };
string splitMarker = "###SPLIT###";

foreach (var _word in WordsList)
{
    string temp = _word;
    foreach (var split in RgxSplits)
    {
        // 忽略大小写的字面量替换
        temp = Regex.Replace(temp, Regex.Escape(split), splitMarker, RegexOptions.IgnoreCase);
    }
    RxltOut.AddRange(temp.Split(new[] { splitMarker }, StringSplitOptions.None));
}

foreach (var x in RxltOut) { Console.WriteLine(x); }

这个方法逻辑更直观,但如果分隔符数量较多,效率会不如直接用正则分割。

内容的提问来源于stack exchange,提问作者Faraz Ahmed Qureshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:11:12