【问题标题】:Replace [ ] bracket in a string替换字符串中的 [ ] 括号
【发布时间】:2015-04-16 17:20:37
【问题描述】:

我有一个包含括号的字符串,[],围绕一个数字。因为这个字符串代表我的 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] 这样做。

有没有办法实现这个“更好”,这意味着对我来说代码更少?

【问题讨论】:

  • 括号是否也与数字不同,您希望在这种情况下保留它们?
  • 您可以使用正则表达式仅匹配特定模式,例如:\[\(d+)\],然后将匹配项替换为其内容。括号用于提取内容
  • 顺便说一句,您要解决的实际问题是什么?括号中的数字是如何在 SQL 语句中结束的,尽管它们不是列名?它们是值还是参数的占位符?

标签: c# sql arrays replace


【解决方案1】:

您似乎想删除所有括号:

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

【讨论】:

  • 这将删除所有括号,而不仅仅是数字周围的括号
  • 这很好!工作得刚刚好。
【解决方案2】:
   string input="ab[test test}" 
   input = Regex.Replace(input, @"(\[|\]|\{|\}|\(|\)|\/|\\|\'|\.)", "");
   result= "abtest test"

【讨论】:

  • 虽然这个纯代码的答案可能是对原始问题的有效解决方案,但对于其他用户在没有任何上下文的情况下查看您的代码正在做什么或它应该如何回答原始问题并没有太大帮助问题。
  • 解释一下。
【解决方案3】:

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

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

【讨论】:

  • 为什么是循环?一次执行将用它们的内容替换所有括号内的数字
  • @PanagiotisKanavos 根据他的要求,我同意你的看法。我会改变那部分。感谢您的评论。
  • @Forlan07:非常感谢。它工作完美。它正是我想要的。我想我将不得不花一些时间使用 REGEX。
【解决方案4】:

这是正则表达式擅长的东西:

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

它匹配[(需要转义,因为左括号通常开始一个字符组),后跟一个或多个数字,后跟一个右括号。数字被捕获(括号),因此可以在替换表达式中使用。

这将替换字符串中的所有匹配项,仅替换第一个将需要更复杂的正则表达式,只匹配一次。

【讨论】:

  • Wouldn´t $0return 整个字符串而不是实际的匹配组?
  • @HimBromBeere 是的。错字...固定
【解决方案5】:

所以你基本上想要一个循环?

for (int i = 0; i <= 20; i++)
{
    noBracket = data.Replace(String.Format("[{0}]", i), i);
}

【讨论】:

  • 您不必检查括号实际是否包含在字符串中,您可以在任何情况下调用replace。然而很酷的答案。
  • 在大范围地抓挠我的下巴后,我必须承认:你是对的!我将编辑我的答案。
  • 这将在大量迭代中创建相当多的临时字符串,受到循环限制的限制,甚至可能找不到合适的数字,例如,如果只有两个名为 [100],[200] 的数字。另一方面,正则表达式将仅在单个操作中创建最终字符串并使用任何数字。
  • 他说,他需要 1 到 20 个。
最近更新 更多