C# 替换字符串中的[]括号
我有一个包含括号的字符串,C# 替换字符串中的[]括号,c#,sql,arrays,replace,C#,Sql,Arrays,Replace,我有一个包含括号的字符串,[],围绕着一个数字。因为这个字符串代表我的SQL数据库列名,所以我需要删除/替换它们。 到目前为止,我的做法如下: if (stringWithBracket.Contains("[0]")) noBracket = data.Replace("[0]", "0"); if (stringWithBracket.Contains("[1]")) noBracket = data
[]
,围绕着一个数字。因为这个字符串代表我的SQL数据库列名,所以我需要删除/替换它们。
到目前为止,我的做法如下:
if (stringWithBracket.Contains("[0]"))
noBracket = data.Replace("[0]", "0");
if (stringWithBracket.Contains("[1]"))
noBracket = data.Replace("[1]", "1");
if (stringWithBracket.Contains("[2]"))
noBracket = data.Replace("[2]", "2");
if (stringWithBracket.Contains("[n]"))
noBracket = data.Replace("[n]", "n");
它工作得很好,但对我来说它看起来很难看,因为我必须在[1]到[20]之间这样做
有没有一种方法可以实现这个“更好”的方法,这意味着对我来说代码更少?您似乎想删除所有括号:
data = data.Replace("[", string.Empty).Replace("]", string.Empty);
所以你基本上想要一个循环
for (int i = 0; i <= 20; i++)
{
noBracket = data.Replace(String.Format("[{0}]", i), i);
}
for(int i=0;i您可以使用Regex.Replace
确保只提取数字:
var pattern = @"\[(\d+)\]";
var replaced = Regex.Replace(stringWithBracket, pattern, "$1");
这是正则表达式擅长的事情:
noBracket = Regex.Replace(stringWithBracket, @"\[(\d+\)]", "$1")
它匹配一个[
(需要转义,因为开始括号通常会启动字符组),后面跟一个或多个数字,后面跟一个结束括号。捕获这些数字(括号),以便在替换表达式中使用
这将替换字符串中的所有匹配项,仅替换第一个匹配项将需要一个更复杂的正则表达式,该正则表达式只匹配一次。括号中是否也包含与数字不同的内容,并且您希望保留它们?您可以使用正则表达式仅匹配特定模式,例如:\[\(d+)\]
,然后将匹配项替换为其内容。括号用于提取内容。顺便问一下,您试图解决的实际问题是什么?括号中的数字虽然不是列名,但如何在SQL语句中结束?它们是值或参数的占位符吗?这将删除所有括号,而不仅仅是numb周围的括号Ers这很好!工作非常完美。你不必检查括号实际值是否包含在字符串中,在任何情况下你都可以调用replace。不过答案很酷。在大幅度地搔了我的下巴之后,我必须承认:你是对的!我会编辑我的答案。这将在大量迭代中创建相当多的临时字符串,受到loo的限制p的极限,甚至可能找不到正确的数字,例如,如果只有两个名为[100],[200]的数字
。另一方面,正则表达式只会在一次操作中创建最终字符串,并与任何数字一起工作。他说,他需要1到20。难道$0
不会返回整个字符串而不是实际匹配的组吗?@HimBromBeere是的。拼写错误…修复了为什么循环?一次执行将用其内容替换所有括号内的数字@PanagiotisKanavos根据他的要求,我同意你的意见。我将更改这一部分。谢谢你的评论。@Forlan07:非常感谢。它工作得非常完美。这正是我所寻找的。我想我将不得不花一些时间处理正则表达式。虽然这段代码唯一的答案可能是解决原始问题的有效方法,但它并没有多大帮助对其他用户而言,在没有任何上下文的情况下查看您的代码或它如何回答原始问题是很有帮助的。应该有一个解释。
string input="ab[test test}"
input = Regex.Replace(input, @"(\[|\]|\{|\}|\(|\)|\/|\\|\'|\.)", "");
result= "abtest test"