有字符串:
h_Test1
{s:include id="h_id"/}
h_Test2
{s:info count="3"}
h_Test3
{s:site top="1"}
h_Test4
{/s:site}
{/s:info}
我想用Regex.Replace()来替换掉"h_"为一个特定字符,例如“Cust_”, 但是有个原则,那就是内部的闭合标签内不处理,希望处理完结果是:
Cust_Test1 // 替换
{s:include id="Cust_id"/} // 替换
Cust_Test2 // 替换
{s:info count="3"}
h_Test3 // 这个属于闭合标签内的,不替换
{s:site top="1"}
h_Test4 // 这个属于闭合标签内的,不替换
{/s:site}
{/s:info}
------解决思路----------------------
这不是正则干的活,最好解析JSON后再做处理
------解决思路----------------------
如果可以按行为单位进行替换,那么判断起来就容易多了。
------解决思路----------------------
有index的话,用StreamReader读取文件,判断读取到index行后则对那行数据替换即可,如果已经是一个完整的字符串,那就自己按照换行符分割为字符串数组,用index替换数组的索引处的字符串,最后再用换行符拼接回整个字符串即可。
------解决思路----------------------
\bh_((?=.*?\s*{[^/])
------解决思路----------------------
(?=\w*?\"))
------解决思路----------------------
static void RegexReplaceSpecial()
{
string str = @"h_Test1
{s:include id=""h_id""/}
h_Test2
{s:info count=""3""}
h_Test3
{s:site top=""1""}
h_Test4
{/s:site}
{/s:info}";
Console.WriteLine(Regex.Replace(str, @"\bh_((?=.*?\s*{[^/])
------解决思路----------------------
(?=\w*?""))", "Cust_"));
}
上面的正则在C#里面要把\"替换成""