我有一个字符串:
varA*varB%+Length('10%')
我想用“/ 100”替换单引号中的所有“%”字符不以
结尾varA*varB/100+Length('10%')
这是一个RegEx的工作吗?
答案 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");