2015-01-08 7 views
1

Я хочу изменить имена моих имен классов и методов в тестах. Их сотни, их очень долго и трудно читать. Подчеркивания помогут.REGEX Visual Studio 2013 найти и изменить

Я создал Regex:

(public class [A-Z][a-z]*(_[A-Z][a-z]*)*)(?<x>[A-Z]) 

Заменить шаблон: $1_${x}

, что дает мой пример: От: public class VeryLongClassNameTestScenarioTwentySeven

To: public class Very_LongClassNameTestScenarioTwentySeven

Следующая использование: public class Very_Long_ClassNameTestScenarioTwentySeven

Дальнейшее использование: public class Very_Long_Class_NameTestScenarioTwentySeven

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

Я полагаю, что регулярные выражения в VS не поддерживают преобразование буквы сверху, в нижний регистр?

Благодаря

+1

вы можете использовать внешний инструмент для выполнения изменения. – Rots

+0

Как Grepwin :) http://stefanstools.sourceforge.net/grepWin.html –

+0

Решает проблему верхнего регистра. Но все равно нужно регулярное выражение. Любая идея, как создать тот, который будет делать все сразу? – apukineimakiapudjuh

ответ

1

У меня нет доступа к моей рабочей станции VS прямо сейчас, но я думаю, что следующий должны работы:

Поиск: (?<=public class .*?)([a-z])([A-Z])

Заменить: $1_$2

(я тестировал на http://regexstorm.net/tester)


Edit: Теперь, когда я сижу перед моей рабочей станции VS, вот результат моего тестирования:

Это «виды» работы ... странно, с помощью следующего кода:

public class ThisIsLongClassName 
{ } 

public class AnotherLongClassName 
{ } 

public class WhoaThisNameIsEvenLonger 
{ } 

Теперь тестирование с сдвига + Ctrl +F:

  • Если я «Найти далее», он должным образом скачки между местами, где замены должны иметь место. Правило регулярное.
  • Однако, когда я нажал «Заменить», он заменяет линию под выделенной линией. Например, выделить на sI первой линии, изменение происходит на rL из второй линии
  • Наконец, нажав на кнопку «Заменить все» ничего не делает

Я думаю, что VS2013 это b0rked. По крайней мере, моя.


Edit 2: Таким образом, я рекомендую вам создать небольшую программу, и пусть это иметь идти "через ваши файлы. Будет намного проще регулярное выражение, так как все, что вам нужно сделать, это убедиться, что линия .TrimStart() начинается с 'public class', а затем просто замените регулярное выражение ([a-z])([A-Z]) на $1_$2 на этой строке.

+0

Спасибо за помощь. Одна вещь - я также думал, что мой ВС нарушен. Но для работы регулярных выражений [a-z] и [A-Z] вы должны проверить «Случай соответствия». Возможно, вы забыли. – apukineimakiapudjuh

+0

Нет, не забыл, что один. Как я уже писал, простой «Найти» работает правильно. Заменить с помощью регулярного выражения просто сломано. – pepoluan

+1

Вероятно, ошибка в Visual Studio, я заметил подобное поведение при выполнении замен более сложными регулярными выражениями. Он часто не сможет что-либо сделать с помощью «Заменить все», и с помощью просто «Заменить» будет выполняться операция с чередующимися экземплярами. Несколько запусков, нажимая [Alt] + [R], в конце концов получат все, кроме одного из экземпляров. Не так хорошо, как правильно работать с 'Replace All', но гораздо лучше, чем делать все вручную! – Zarepheth