Я пытаюсь использовать регулярное выражение, чтобы избавиться от строк между конкретными символами, например "[" и "]":
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
Любые подсказки о том, как удалить материал между промежуточными разделителями? Благодарю.
Эта небольшая модификация должна решить вашу проблему:
string regex = "\\[(.*?)\\]";
Этот бит (.*?)
Будет соответствовать всем, но займет как можно меньше.
Причина, по которой ваше регулярное выражение удаляет все между первым [
и последним ]
состоит в том, что по умолчанию модификаторы являются жадными, т.е. они соответствуют как можно большему количеству букв.
Вы можете использовать ленивый матч, как в других ответах, или можете использовать
string regex = @"\[[^\]]*\]"
Это регулярное выражение соответствует левой квадратной скобке, затем оно берет что угодно, кроме прямоугольной скобки, а затем заканчивается в правой квадратной скобке.
var input = "There is a (blue) cloud on top of that(big) elephant";
var output = Regex.Replace(input, @" ?\(.*?\)", string.Empty);
это сделает работу
Чтобы удалить также ведущее или конечное пространство, вы можете использовать это
string actualOut = Regex.Replace(input, @"^\[[^\]]*\]\s+|\s+\[[^\]]*\]", "");