Regex拆分-转义与我用于拆分的字符相同的字符

本文关键字:拆分 字符 用于 转义 Regex | 更新日期: 2023-09-27 18:23:49

我有一个字符串:

string data = "SEQUENCE $FIRST$ THEN $SECOND$ AND FINALLY ''$12345";

我想使用Regex使用"$"字符将其拆分。但是,我想使用''作为转义符。

string[] sComponents = Regex.Split(data, "(''$)", RegexOptions.ExplicitCapture);

通过运行上面的代码,我会得到:

sComponents[0] = "SEQUENCE "
sComponents[1] = "FIRST"
sComponents[2] = " THEN "
sComponents[3] = "SECOND"
sComponents[4] = " AND FINALLY "
sComponents[5] = "12345"

但我希望sComponents[4]包含$,例如"AND FINALY$1345"

实现这一点的最佳方法是什么?Regex在分裂时是否有某种类型的转义字符?或者在我用自己的逻辑调用Regex Split之前,我必须手动处理这个问题?

基本上可以归结为,如果Regex看到"$",那么就拆分,但如果它看到"''''$",就忽略它,不要在这个位置拆分。

Regex拆分-转义与我用于拆分的字符相同的字符

只需根据下面使用负前瞻的正则表达式拆分输入字符串。

'$(?!'d)

代码:

string value = "SEQUENCE $FIRST$ THEN $SECOND$ AND FINALLY $12345";
string[] lines = Regex.Split(value, @"'$(?!'d)");
foreach (string line in lines) {
Console.WriteLine(line);

IDEONE

更新:

使用下面的正则表达式根据前面没有两个反斜杠的$符号拆分输入。

(?<!'''')'$

代码:

string value = "SEQUENCE $FIRST$ THEN $SECOND$ AND FINALLY ''''$12345";
string[] lines = Regex.Split(value, @"(?<!'''')'$");
foreach (string line in lines) {
Console.WriteLine(line);

IDEONE