使用RegEx仅在引号之外替换字符串

时间:2011-09-23 13:37:46

标签: c# .net regex

我有一个字符串:

varA*varB%+Length('10%')

我想用“/ 100”替换单引号中的所有“%”字符

结尾
varA*varB/100+Length('10%')

这是一个RegEx的工作吗?

3 个答案:

答案 0 :(得分:5)

非正则表达式解决方案而不是那么脏;)

    string a = "varA*varB%+Length('10%')";
    string[] b = a.Split('\'');
    string c = string.Empty;
    int i = 0;
    foreach (string sbs in b)
    {
        c += i%2==0?sbs.Replace("%","/100"):"'" + sbs + "'";//for the every odd value of i "%" is within single quotes
        i++;
    }

答案 1 :(得分:1)

一种稍微有效的解决方案,然后是接受的答案。

        string a = "varA*varB%+Length('10%')";
        string[] parts = a.Split('\'');
        for (int i = 0; i < parts.Length; i = i + 2)
        {
            parts[i] = _parts[i].Replace("%","/100");
        }
        a = string.Join("'", parts);

答案 2 :(得分:-1)

尝试下面的一个。你必须在正则表达式中使用组和后引用。我已经在Ultraedit中使用Perl正则表达式语法进行了尝试。它运作良好。

%([^']) --> /100\1

此正则表达式意味着:找到后面没有',如%a 将匹配。然后将替换为 / 100 以及后面的一个字符。在这种情况下,它是 a

string str = "varA*varB%+Length('10%')";
string output=Regex.Replace(str, "%([^'])", @"/100$1");

string str2 = "varA*varB%+Length('10%')+varA*varB%+Length('10%')+bob%";
string output2 = Regex.Replace(str2, "%([^']|$)", @"/100$1");