我有以下几个Trues
和Falses
的SQL字符串:
INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5)
Values (False,False,True,False,False)
我想将所有False替换为0,将所有True替换为1.但是当我尝试这个时:
sql = sql.Replace(",True,", ",1,").Replace(",True)", ",1)").Replace(",False,", ",0,").Replace(",False)", ",0)");
...它只删除了Falses中的 一些 ...并非全部。例如,我最终得到了这个:
INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5)
Values (0,False,1,0,False)
我的期望是:
INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5)
Values (0,0,1,0,0)
然后我尝试使用正则表达式(仅显示1件):
sql = Regex.Replace(sql, ",True)", ",1)");
该特定行突然出现此错误:parsing ",True)" - Too many )'s.
用1s和0s替换sql语句中所有Trues和Falses的最有效方法是什么?我总是在c#中找到string.Replace()来全局替换,我很困惑为什么它缺少一些。那里没有空格,我有三重检查。这方面的一个证明是,如果我第二次运行REPLACE系列,那么会替换落后者。为什么不是第一次? c#replace
真的不是全球性的吗?谢谢。
答案 0 :(得分:3)
您收到Regex.Replace
错误,因为)
是需要转义的元字符。放置退格(常规C#字符串的两个退格)将解决此问题:
sql = Regex.Replace(sql, ",True\\)", ",1\\)");
您可以使用\\b
锚点简化逗号/括号处理:
sql = Regex.Replace(sql, "\\bTrue\\b", "1");
答案 1 :(得分:0)
没有必要使用Regex或",True," 它可以用非常简单的方式完成
string s="INSERT INTO SystemRules (Col1, Col2, Col3, Col4, Col5)Values (False,False,True,False,False)";
s=s.Replace("False", "0").Replace("True", "1");