替换一个字符串中的 [ ] 方括号

3

我有一个包含括号[]和一个数字的字符串。由于这个字符串代表了我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]进行这样的操作。

有没有一种更简便的实现方式,也就是说,对于我来说,代码量更少?


1
如果括号不仅包围数字,您希望在该情况下保留它们吗? - Steve
你可以使用正则表达式来匹配特定的模式,例如:\[\(d+)\],然后用其内容替换匹配项。括号用于提取内容。 - Panagiotis Kanavos
顺便问一下,您试图解决的实际问题是什么?尽管它们不是列名,但括号中的数字如何出现在SQL语句中?它们是值或参数的占位符吗? - Panagiotis Kanavos
5个回答

12

您可以使用Regex.Replace来确保仅提取数字:

var pattern = @"\[(\d+)\]";
var replaced = Regex.Replace(stringWithBracket, pattern, "$1"); 

为什么要循环?一次执行将替换所有带括号的数字为它们的内容。 - Panagiotis Kanavos
@PanagiotisKanavos 根据他的需求,我同意你的观点。我会更改那部分内容。感谢您的评论。 - oopbase
@Forlan07:非常感谢。它完美地运行了。这正是我在寻找的。我想我需要花些时间学习正则表达式。 - ck84vi

5

看起来你想要删除所有括号:

data = data.Replace("[", string.Empty).Replace("]", string.Empty);

3
这将移除所有的括号,不仅限于数字周围的括号。 - Panagiotis Kanavos
这很不错!完美地运行了。 - user2906838

3
所以您基本上想要一个循环吗?
for (int i = 0; i <= 20; i++)
{
    noBracket = data.Replace(String.Format("[{0}]", i), i);
}

1
你不必检查括号实际上是否包含在字符串中,无论如何都可以调用replace。不过回答很棒。 - MakePeaceGreatAgain
经过深思熟虑,我必须承认:你是正确的!我会编辑我的答案。 - Marco
1
这将在许多迭代中创建相当多的临时字符串,受循环限制,并且可能甚至无法找到正确的数字,例如如果只有两个名为[100],[200]的数字。另一方面,正则表达式将在单个操作中仅创建最终字符串,并使用任何数量。 - Panagiotis Kanavos
他说,他需要1到20。 - Marco

3

这正是正则表达式擅长的内容:

noBracket = Regex.Replace(stringWithBracket, @"\[(\d+\)]", "$1")

它匹配一个[(需要转义,因为通常开头的括号表示字符组),后面跟着一个或多个数字,然后是一个闭合括号。数字被捕获(圆括号),因此可以在替换表达式中使用。
这将替换字符串中的所有出现,要仅替换第一个需要更复杂的正则表达式,只匹配一次。

4
“$0”会返回整个字符串而不是实际匹配的组,对吗? - MakePeaceGreatAgain
@HimBromBeere 是的。打字错误已修复。 - Richard

0
   string input="ab[test test}" 
   input = Regex.Replace(input, @"(\[|\]|\{|\}|\(|\)|\/|\\|\'|\.)", "");
   result= "abtest test"

虽然这个仅包含代码的答案可能是原问题的有效解决方案,但对于没有任何上下文了解你的代码在做什么或者如何回答原问题的其他用户来说并不是很有帮助。 - CEH
需要解释一下。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接