Заменить текст в строке с разделителями, используя Regex - PullRequest
1 голос
/ 21 ноября 2011

У меня есть строка, похожая на

string str = "(50%silicon +20%!(20%Gold + 80%Silver)| + 30%Alumnium)";

Мне нужно регулярное выражение, которое заменяет содержимое между ними!и |с пустой строкой.Результат должен быть (50%silicon +20% + 30%Alumnium).

Если строка содержит что-то вроде (с вложенными разделителями):

string str = "(50%silicon +20%!(80%Gold + 80%Silver + 20%!(20%Iron + 80%Silver)|)|
              + 30%Alumnium)";

Результат должен быть (50%silicon +20% + 30%Alumnium) - игнорируя вложенные разделители.

Я пробовал следующее регулярное выражение, но оно не игнорирует вложенность:

Regex.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase);

Ответы [ 3 ]

5 голосов
/ 21 ноября 2011

Вы используете ленивый квантификатор +?, который будет искать наименьшую возможную подстроку, соответствующую вашему регулярному выражению.Чтобы получить результат, который вы ищете, вы хотите использовать жадный квантификатор +, который будет соответствовать максимально возможной подстроке.

Следующее регулярное выражение (не проверено в C #, потому что у меня его нетно это должно работать для любой стандартной реализации регулярных выражений) будет делать то, что вы хотите:

'!.+\|'

2 голосов
/ 21 ноября 2011
using System.Text.RegularExpressions;

str = Regex.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase);
0 голосов
/ 21 ноября 2011
 Regex.Replace(str, @"!.+?\||\)\|", "", RegexOptions.IgnoreCase);

Работает для обеих предоставленных строк.Я расширил регулярное выражение со второй проверкой ") /", чтобы заменить оставшиеся символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...