当前位置: 代码迷 >> C# >> 【正则】求教1正则写法
  详细解决方案

【正则】求教1正则写法

热度:107   发布时间:2016-05-05 04:27:23.0
【正则】求教一正则写法
有字符串:

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#里面要把\"替换成""
  相关解决方案