替换字符串C#中的逗号

时间:2015-09-01 16:31:19

标签: c# regex string

我有一个这样的字符串:

select name,lastname,email from contacts

我想替换 +“|”+ 的逗号  得到这样的东西

select name+"|"+lastname+"|"+email from contacts

用string.Replace(“,”,+“|”+);

很容易

但问题是当我面对这样的字符串时:

select name,lastname,isnull(email,0) from contacts

如何检测以避免isnull()中的逗号? 使用替换我得到一个像这样的字符串

select name+"|"+lastname+"|"+isnull(email+"|"+0) from contacts

那就错了!

谢谢。

2 个答案:

答案 0 :(得分:3)

试试这个:

public static string ReplaceTopLevelCommas(string query)
{
    var newQuery = new StringBuilder();
    var level = 0;

    foreach (var c in query)
    {
        if (c == ',')
        {
            if (level == 0)
            {
                newQuery.Append("+\"|\"+");
            }
            else
            {
                newQuery.Append(c);
            }
        }
        else
        {
            if (c == '(')
            {
                level++;
            }
            else if (c == ')')
            {
                level--;
            }

            newQuery.Append(c);
        }
    }

    return newQuery.ToString();
}

只有当逗号不在括号内时才会替换逗号。所以它也适用于多层嵌套。

工作示例:http://ideone.com/TGPRe2

答案 1 :(得分:2)

只需编写自己的方法:

private static string replace_commas(String str_)
{
    StringBuilder str = new System.Text.StringBuilder(str_);

    bool replace = true;

    for(int i = 0; i != str.Length; ++i)
    {
        if(str[i] == ',' && replace)
            str[i] = '|';

        if(str[i] == '(')
        {
            replace = false;
            continue;
        }

        if(str[i] == ')' && !replace)
            replace = true;
    }

    return str.ToString();
}

你填空了! : - )