Найти и заменить регулярным выражением в Visual Studio 10 - PullRequest
1 голос
/ 30 сентября 2011

Например, у меня есть следующие строки:

abc Редактировать рабочий лист xyz
abc Редактировать контракт xyz
abc Редактировать xyz

Теперь я хочу заменить только строку «Редактировать»в «Подробно», «Редактировать рабочий лист», «Редактировать контракт» остаются прежними.Результат должен быть:

abc Редактировать рабочий лист xyz
abc Редактировать контракт xyz
abc Подробно xyz

Буду признателен, если вы сможете дать объяснение.

Ответы [ 6 ]

3 голосов
/ 30 сентября 2011

Чтобы соответствовать «Редактировать», только если за ним не следует слово «рабочий лист» или «контракт», вы можете использовать это:

<Edit>~(:b+(worksheet|contract))
  • < и > соответствует началу и концу слова соответственно.

  • ~(...) - это то, что большинство разновидностей регулярных выражений называют отрицательным прогнозом .

  • :b+ соответствует одному или нескольким пробелам или символам табуляции в любой комбинации.

Эти конструкции доступны во многих разновидностях регулярных выражений, но Visual Studio использует собственный, чрезвычайно необычный синтаксис.

1 голос
/ 30 сентября 2011

Вы можете сделать трюк следующим образом:

  1. заменить во всем вашем коде «Редактировать лист» на «ABC123»
  2. заменить во всем вашем коде «Редактировать контракт» на «DEF456 "
  3. заменить во всем вашем коде" Редактировать "на" Подробно "
  4. заменить во всем вашем коде" ABC123 "на" Редактировать рабочий лист "(восстановить старые строки)
  5. замените во всем вашем коде «DEF456» на «Редактировать контракт» (восстановить старые строки)

другими словами, вы скрываете «Редактировать рабочий лист» и «Редактировать контракт» с 2 фантазийными и уникальными строками, а затем делаетезапрошенная замена и, наконец, восстановление исходного текста.

1 голос
/ 30 сентября 2011

В диалоговом окне «Найти и заменить» в Visual Studio:

Найти что: Редактировать ~ (рабочий лист | контракт) Заменить на: Деталь

1 голос
/ 30 сентября 2011

Предполагая, что это единственное слово в строке, найдите:

^Edit$

и заменить на

Detail

^ соответствует началу строки.
$ соответствует концу строки.

0 голосов
/ 30 сентября 2011

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

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

Я пишу пример на мета-языке:

While not EnfOfLine
   if "'Edit' is found" then
      if not "next word is 'worksheet' or 'contract'"
          then replace ("Edit", "Detail")
      end if
   end if
   go next line
end while
0 голосов
/ 30 сентября 2011

Не думаю, что вам нужно регулярное выражение?

Разве вы не можете просто заменить "abc Edit xyz" на "abc Detail xyz"

Или abc и xyz не всегда совпадают

...