正则表达式拆分,其中 \# 拆分而 \# 不拆分

问题描述 投票:0回答:2

我需要分割一些文本,但

\\
表示单个
\
,而
\
是文字字符的指示符。 我从以下代码开始,但它被
\\
愚弄了。 所以 \# (# 前面有 0 或偶数个 's ) 会分裂,但 # (# 前面有奇数个 's ) 不会分裂

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

我希望消息以

的形式出现
1
2\\
3\#still 3
4\\\# still 4

但不知道如何忽略

\\
实例,所以我的结果是

1
2\\#3
3\#still 3
4\\\# still 4
regex
2个回答
0
投票

我认为通过双重回顾是可行的。所以将正则表达式字符串更改为 @"(?

string message = @"(?<!(?<![^\\]\\(?:\\{2}){0,10})\\)#");
var v = Regex.Split(message, @"(?<!\\)#")
    .ToArray();

这给出了

的输出
   1
   2\\
   3
   3\#still 3
   4\\\# still 4

0
投票

使用

Matches
比使用
Split
更容易做到这一点,因为您可以根据需要将尽可能多的转义斜杠与后续字符配对:

    var v = Regex.Matches(message, @"(\\.|[^#])*")
                  .Cast<Match>()
                  .Select(m => m.Value)
                  .ToArray();

确保包含

using System.Linq;

© www.soinside.com 2019 - 2024. All rights reserved.