正则表达式拆分 - 逃避我用于拆分的相同角色

时间:2014-09-19 17:16:01

标签: c# regex

我有一个字符串:

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 FINALLY $ 12345”

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

基本上它归结为,如果Regex看到“$”然后拆分但是如果它看到“\\ $”则忽略它不会在这个位置拆分。

1 个答案:

答案 0 :(得分:4)

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

\$(?!\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