删除字符串正则表达式中的CLOSEST分隔符之间的文本

时间:2015-04-04 15:20:13

标签: c# regex

我正在尝试使用正则表达式来消除特定字符之间的字符串,例如" ["和"]":

input = "There is a [blue] cloud on top of that [big] elephant";
desiredOut = "There is a cloud on top of that elephant"; // this is what i want

但如果我使用正则表达式替换" ["和"]"我删除了第一个和最后一个字符之间的所有内容:

string input = "There is a [blue] cloud on top of that [big] elephant";
string regex = "(\\[.*\\])" ;
string actualOut = Regex.Replace(input, regex, "");

actualOut = "There is a elephant" // this is what i get

有关如何删除中间分隔符之间的内容的任何线索?感谢。

4 个答案:

答案 0 :(得分:2)

这种轻微的修改可以解决您的问题:

string regex = "\\[(.*?)\\]";

此位(.*?)将匹配所有内容,但会尽可能少。

答案 1 :(得分:0)

var input = "There is a (blue) cloud on top of that(big) elephant";
var output = Regex.Replace(input, @" ?\(.*?\)", string.Empty);

这将完成工作

答案 2 :(得分:0)

你的正则表达式删除第一个[和最后一个]之间的所有内容的原因是因为默认情况下修饰符是贪婪的,即。它们匹配尽可能多的字母。

您可以像在其他答案中一样使用延迟匹配,也可以使用

string regex = @"\[[^\]]*\]"

这个正则表达式匹配左方括号,然后它需要除了一个右方括号,然后在右方括号处完成。

答案 3 :(得分:0)

要删除前导或尾随空格,您可以使用此

string actualOut = Regex.Replace(input, @"^\[[^\]]*\]\s+|\s+\[[^\]]*\]", ""); 

DEMO