Замена всех экземпляров имени во всех строках в решении - PullRequest
1 голос
/ 09 сентября 2011

У нас есть большое решение со многими проектами, и во всем проекте в формах, сообщениях и т. Д. У нас есть ссылка на название компании. В течение многих лет название этой компании было одинаковым, поэтому ее не планировалось менять, но теперь оно изменилось.

Приложение относится к одному штату в США, поэтому файлы локализаций / строковых ресурсов никогда не рассматривались и не использовались.

Быстрый поиск всех экземпляров слова поднял 1309 строк, но нам нужно только изменить строки, которые в действительности отображаются пользователю (текст кнопки, текст сообщения и т. Д.).

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

Есть ли способ легко найти эти "экземпляры"? Возможно, тип Regex, который можно использовать в функциональности «Найти все» в Visual Studio, чтобы вытащить слово, только когда оно заключено в кавычки?

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

Ответы [ 2 ]

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

Вы можете попробовать. (Надеюсь, ваш код находится под контролем исходного кода!)

Foobar{[^"]*"([^"]*"[^"]*")*[^"]*}$

И заменить на

NewFoobar\1

Пояснение

Foobar имя, которое вы ищете

[^"]*" Обходной путь для отсутствующего не жадного модификатора. [^"] означает совпадение с чем угодно, кроме ", что означает совпадение с чем угодно до первого ".

([^"]*"[^"]*")* Для обеспечения соответствия только внутри кавычек. Это гарантирует, что последуют только полные наборы цитат.

[^"]* гарантирует, что к концу строки больше нет кавычек $

{} фигурные скобки объединяют все эти вещи после названия вашей компании в группу захвата, вы можете обратиться к ней, используя \1

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

Возможность регулярного выражения VS довольно ограничена. Возможно, это составляет 20% от того, что можно сделать с помощью полнофункциональных регулярных выражений. Это не будет достаточно для ваших нужд. Например, один из способов решения этой проблемы , заключенной в кавычки, - это использование не жадного сопоставления , которое не поддерживает регулярное выражение VS.

Если бы я был на вашем месте, я бы написал скрипт perl или сборку C #, которая запускается за пределами Visual Studio и просто перебирает все файлы (с определенным расширением) и исправляет все. Затем перезагрузите в Visual Studio, и все готово. Хорошо, если все прошло хорошо с регулярным выражением в любом случае.

В конечном счете, вы действительно должны остерегаться такого кода:

Log.WriteLine("Hello " + m_CompanyName + " There");

В этом случае регулярное выражение будет думать, что «m_CompanyName» появляется между двумя кавычками - но это не то, что вы имели в виду. В этом случае вам нужно еще больше изощренности, и я думаю, вы найдете ответ с специальным расширением регулярного выражения .net .

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