如何替换2个字符之间的文字?

时间:2014-08-16 10:31:36

标签: c# .net regex string

我想用Visual C#删除文本中2个字符之间的内容。
这是一个例子:

  

鉴于:嗨[大家],我22岁,我是越南的一名技术大学的学生   结果:嗨,我22岁,我是越南的学生

我使用这种语法

string input = "Hi [everybody], I'm 22 years old, I'm a student [at a University of Technology]";
string regex = "(\\[.*\\])";
string output = Regex.Replace(input, regex, "");

但代码将在第一个和最后一个方括号之间全部删除,因此结果如下:

  

你好在越南

我该如何解决?

3 个答案:

答案 0 :(得分:5)

.*贪婪,因此您的表达式会在[]之间匹配尽可能多的字符 - 包括许多其他[]秒。

您可以通过以下两种方式解决此问题之一:

  • 添加?。这使* 贪婪:.*?在匹配]之前将匹配为少数字符。

  • .替换为[^]],这样只会让表达式与][之间的非]字符匹配。

答案 1 :(得分:1)

只需用空字符串

替换[...]之间的所有内容
\s+\[[^\]]*\]

这是online demo

或使用Non-greedy方式,但请先阅读✽ Want to Be Lazy? Think Twice.

\s+\[(.*?)\]

这是demo

答案 2 :(得分:0)

要匹配文字以替换使用:

\s+\[.*?]

作为C#String,这是:

@"\s+\[.*?]"

如果你在字符串前面使用@,则不需要在C#中转义它。