我有一个字符串:
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看到“$”然后拆分但是如果它看到“\\ $”则忽略它不会在这个位置拆分。
答案 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);
<强>更新强>
使用以下正则表达式根据$
符号分割输入,该符号前面没有两个反斜杠。
(?<!\\\\)\$
代码:
string value = "SEQUENCE $FIRST$ THEN $SECOND$ AND FINALLY \\\\$12345";
string[] lines = Regex.Split(value, @"(?<!\\\\)\$");
foreach (string line in lines) {
Console.WriteLine(line);