2013-11-13 4 views
1

Как удалить раздел текста между [Start] и [End] из строкового блока, включая теги?Удалить раздел текста с помощью regex C#

Есть ли более простой способ, чем использование IndexOf и Substring и т. Д.?

Обновление: Я пытаюсь использовать

var output = Regex.Replace("[Start]SomeText[End]", @"(?<=[Start]).*(?=[End])", ""); 

Но картина не совсем работает. Необходимо удалить все между [Start] и [End]

Ввод текста: [Start] Hello World [End]

Вывод текста: [Начало] [Конец]

ответ

1

Вы можете попробовать это:

Regex rgx = new Regex(@"(?<=\[Start])(?s).+?(?=\[End])"); 
string output = rgx.Replace(input, ""); 

или это, что будет быстрее:

Regex rgx = new Regex(@"(?<=\[Start])(?>[^[]+|\[(?!End]))+(?=\[End])"); 
string output = rgx.Replace(input, ""); 
+0

Почему второй быстрее? – Amicable

+1

@Amicable: потому что первый использует ленивый квантификатор и должен проверять каждый символ, если после этого есть '[End]'. Второй должен проверить, есть ли «конец» после, только если встреченный символ - '[' –

0

[ и ] являются специальными символами в регулярных выражениях.

var output = 
    Regex.Replace("[Start]SomeText[End]", @"(?<=\[Start\]).*(?=\[End\])", ""); 
+0

Кажется, не работает:/ – PeteTheGreek

+0

Уход объяснить - можете ли вы привести пример где он не работает, как вы ожидали бы (и каков ваш желаемый результат)? – decPL

+0

Я обновил выше с вводом и выводом – PeteTheGreek

Смежные вопросы