无法用整数替换bools

时间:2017-08-14 17:31:44

标签: c#

我有以下几个TruesFalses的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真的不是全球性的吗?谢谢。

2 个答案:

答案 0 :(得分:3)

您收到Regex.Replace错误,因为)是需要转义的元字符。放置退格(常规C#字符串的两个退格)将解决此问题:

sql = Regex.Replace(sql, ",True\\)", ",1\\)");

您可以使用\\b锚点简化逗号/括号处理:

sql = Regex.Replace(sql, "\\bTrue\\b", "1");

但是,将SQL作为字符串操作是一个非常危险的想法(why?)。您应该重构代码以改为使用参数化SQL(how?)。

答案 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");