删除" []"以及字符串中出现的所有内容

时间:2014-08-22 11:14:53

标签: c# regex string replace

我正在构建一个小型文本清理程序,而我目前正在Wiki文章中对其进行测试,并且我试图有效地删除" [2]" ," [14]"," [nb 6]"等。

我有这个代码几乎完成了这项工作,但它看起来非常漫长,我觉得必须有一种方法可以在一行中完成它,但我是Regex的新手并且无法形象出来。我也读过有关正则表达式的不同意见,所以如果这是一种非常好的改变方式。

无论如何,这是我目前的代码:

string  refinedText = Regex.Replace(sourceText, @"\[[0-9]\]", "");

        refinedText = Regex.Replace(refinedText, @"\[[0-9]", "");
        refinedText = Regex.Replace(refinedText, @"\[[a-z]", "");
        refinedText = Regex.Replace(refinedText, @"[0-9]\]", "");

问题是" []"中有2个数字。并且我不知道如何告诉它去除两者,正如做" 0-9"只需删除第一个数字,我就可以为它们分2个部分进行替换;但是对于" [nb 3]" b总是保持不变,因为我无法指定单独的" b"在" []"之后不再被用作参考。另外" [nb 14]"如果在" nb"之后有两位数,则同样的问题。

我确定这只是在一行中完成,但我无法找到解释正则表达式的任何地方。

-Thanks。

3 个答案:

答案 0 :(得分:4)

如果您想删除方括号及其内容,无论内容是什么,表达式如下所示:

@"\[[^\]]*\]"

这意味着"匹配所有内容,直到你到达结束括号"。这比不情愿的限定符.*?更有效,因为它避免了所谓的catastrophic backtracking

答案 1 :(得分:0)

使用+修饰符:

string refinedText = Regex.Replace(sourceText, @"\[[0-9]+\]", "");

正如Regular Expression Language - Quick Reference所解释的那样:

  

匹配前一个元素一次或多次。

删除括号中的任何字符:

string refinedText = Regex.Replace("[0as9]", @"\[.+\]", "");

或者,如果您还要处理"[]"案例,请将+更改为*

  

匹配前一个元素零次或多次。

string refinedText = Regex.Replace("[0as9]", @"\[.*\]", "");

答案 2 :(得分:0)

试试这样:

string  refinedText = Regex.Replace(sourceText, @"\[[0-9]+\]", "");

你也可以尝试这样:

var refinedText = Regex.Replace(sourceText, @" ?\[.*?\]", string.Empty);

<强> REGEX DEMO

这将删除文本框中的所有内容,包括字符和数字