Справка Visual Studio по поиску и замене регулярных выражений

Я хотел бы заменить некоторые операторы присваивания, такие как:

int someNum = txtSomeNum.Text; 
int anotherNum = txtAnotherNum.Text;

с участием

int someNum = Int32.Parse(txtSomeNum.Text);
int anotherNum = Int32.Parse(txtAnotherNum.Text);

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


person David Hodgson    schedule 24.01.2010    source источник


Ответы (4)


Я думаю, что в Visual Studio вы можете помечать выражения фигурными скобками {txtSomeNum.Text}. Затем при замене вы можете сослаться на него с помощью \1. Таким образом, строка замены будет выглядеть примерно так: Int32.Parse(\1).


Обновление: через @Timothy003

VS 11 избавляется от синтаксиса {} \1 и использует () $1

person Mark Wilkins    schedule 24.01.2010
comment
Я знаю, что это старо ... но какого черта Microsoft должна делать все по-своему. Все другие IDE и программы, которые я когда-либо использовал, используют () для обозначения выражений и $1 для ссылки на них. Microsoft должна называть эти нерегулярные выражения - person MikeMurko; 06.10.2011
comment
@MikeMurko VS 11 избавляется от синтаксиса {} \1 и использует () $1. ура! - person Timothy003; 08.05.2012


Это то, что я искал:

Найти: = {.*\.Text}

Заменить: = Int32.Parse(\1)

person David Hodgson    schedule 24.01.2010
comment
Вы должны избежать второго периода в регулярном выражении. - person Max Shawabkeh; 24.01.2010
comment
Хороший улов. Мне действительно нужно было избежать символа \, чтобы он отображался. - person David Hodgson; 24.01.2010

Лучшее регулярное выражение для исходной проблемы было бы

найти выражение: {:i\.Text}

заменить выражение: Int32.Parse(\1)

Проверьте: http://msdn.microsoft.com/en-us/library/2k3te2cs%28v=vs.100%29.aspx

для полного руководства по регулярному выражению в VS.

Недавно я закончил переформатирование проекта C++ другого программиста из ада. Он полностью и произвольно ввел или опустил наугад пробелы и табуляции, отступы (или нет) и безумный уровень вложенности скобок, такой, что никто из нас не привык к стандартам кодирования любого типа. мог бы даже начать читать код раньше, чем я начал. Широко использовал регулярное выражение для поиска и исправления ненормальных конструкций. За пару часов я смог исправить основные проблемы примерно в 125 000 строк кода, фактически не заглядывая в большинство из них. В одном отдельном поиске/замене я изменил более 22 000 строк кода в 125 файлах, общее время менее 10 секунд.

Особенно полезные конструкции в регулярном выражении:

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

:i == соответствует имени переменной или ключевому слову в стиле C (например, while, if, pick3, bNotImportant)

:Wh == символ пробела; не просто пробел или вкладка

:Sm == любой из арифметических символов (+, -, >, = и т.д.)

:Pu == любой знак препинания

\n == разрыв строки (полезно для поиска места, где он вставил 8 или 10 пустых строк)

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

Хотя было бы неплохо сопоставить какой-нибудь другой стандарт регулярных выражений (ага), я нашел ряд расширений MS чрезвычайно полезными для поиска в кодовой базе, например, не нужно было сотни раз определять «идентификатор» как «[A- Za-z0-9]+", вместо этого просто используя ":i".

person Ken    schedule 15.02.2012