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

正则表达式拆分需求:仅拆分未被反斜杠转义的#字符

正则拆分问题:仅拆分前接0个或偶数个反斜杠的#

需要拆分一段文本,其中\\表示单个\,\作为字面字符的转义符。要求仅拆分前接0个或偶数个\的#,不拆分前接奇数个\的#。

当前代码

string message = @"1#2\\#3#3\#still 3#4\\\# still 4";
var v = Regex.Split(message, @"(?<!\\)#")
        .ToArray();

当前结果

1
2\\#3
3\#still 3
4\\\# still 4

期望结果

1
2\\
3\#still 3
4\\\# still 4

正确的正则表达式及解释

原正则(?<!\\)#仅检查#前无单个反斜杠,无法识别前接偶数个反斜杠的情况(比如2\\#中的#前有两个反斜杠,属于转义后的字面反斜杠,该#应被拆分)。

正确的正则表达式为:

(?<!\\(?:\\\\)*)#

逻辑说明:

  • (?:\\\\)*:匹配任意数量(含0)的成对反斜杠,即偶数个反斜杠
  • \\(?:\\\\)*:匹配奇数个反斜杠(1 + 2n个)
  • (?<!...):负向回顾后发断言,确保#的前面不是奇数个反斜杠

修改后的代码:

string message = @"1#2\\#3#3\#still 3#4\\\# still 4";
var v = Regex.Split(message, @"(?<!\\(?:\\\\)*)#")
        .ToArray();

执行后即可得到期望的拆分结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:45:16