C # Regex Заменить игнорировать конкретную строку - PullRequest
1 голос
/ 29 июня 2011

Так как это мой первый вопрос здесь по stackoverflow, я надеюсь, что мой вопрос задан правильно.

В основном у меня есть обычный файл .txt, который содержит любой текст, такой как:

car accident
people died
cat without owner


<!-- Text added at 6/29/2011 9:20:38 AM -->

Some addintional Text
other Text added
add Text

Iесть функция записи / добавления, которая позволяет пользователю добавлять текст и устанавливать небольшую временную метку.

Итак, моя проблема: с другой функцией вы можете искать и заменять текст в текстовом файле, но, как вы можете догадаться,если кто-то захочет заменить слово «Текст», оно будет также заменено в стильном xml-комментарии (отметка времени).

Мой результат до сих пор равен

content = Regex.Replace(content,"[^<+.*"+input+".*>+]*", replace);
//content = content of the .txt file, input = search term, replace = string to replace

Но это с треском проваливается, как некоторые regex pro увидят, не выполняя его.

Теперь я надеюсь, что некоторые regex pro могли бы помочь мне здесь и предоставить мне шаблон поиска, который заменяет обычный текст, но игнорирует метку времени.

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

Спасибо за совет.

1 Ответ

1 голос
/ 29 июня 2011

Если я правильно понимаю ваш вопрос, вы хотите заменить каждый экземпляр «Текст», кроме одного (-ых) внутри комментария.

Самый простой способ - использовать отрицательный вид сзади (фантастическое описание здесь ), как показано ниже:

content = Regex.Replace(content, @"(?<!<!--.*?)" + input, replace);

Вы пытаетесь заменить повторение любой длины символа, который НЕ является <+. *>, Или символа, содержащегося в input, значением replace.

Если вы собираетесь много работать с Regex, я НАСТОЯТЕЛЬНО рекомендую дать сайту выше хорошее чтение. Лучшее вступление в Regex, которое я нашел, - это потраченное сейчас время, которое избавит вас от многих головных болей позже!

Редактировать

Обновлен, чтобы добавить гибкость благодаря @ stema

...