我需要分割一些文本,但
\\
表示单个\
,而\
是文字字符的指示符。 我从以下代码开始,但它被\\
愚弄了。 所以 \# (# 前面有 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
我认为通过双重回顾是可行的。所以将正则表达式字符串更改为 @"(?
string message = @"(?<!(?<![^\\]\\(?:\\{2}){0,10})\\)#");
var v = Regex.Split(message, @"(?<!\\)#")
.ToArray();
这给出了
的输出 1
2\\
3
3\#still 3
4\\\# still 4
使用
Matches
比使用 Split
更容易做到这一点,因为您可以根据需要将尽可能多的转义斜杠与后续字符配对:
var v = Regex.Matches(message, @"(\\.|[^#])*")
.Cast<Match>()
.Select(m => m.Value)
.ToArray();
确保包含
using System.Linq;