Рефакторинг с помощью справки по регулярным выражениям (стиль c в стиле c #)

#c# #regex #refactoring #resharper

#c# #регулярное выражение #рефакторинг #resharper

Вопрос:

Я конвертирую некоторый код C в C #, и все идет хорошо, однако я хотел бы изменить порядок вещей, чтобы:

 Util.SetStart(someObject, somePoint);
  

…преобразуется в:

 someObject.StartPoint = somePoint;
  

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

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

Комментарии:

1. Поскольку startPoint нигде не существует в исходном тексте, я предполагаю, что у вас есть какая-то таблица поиска? Кажется, это намного больше, чем может справиться простая замена строки.

2. Предположим, вы можете сделать это с помощью замены регулярных выражений. Как вы собираетесь заставить это работать в вашей IDE?

Ответ №1:

Поскольку вы не разъясняете, как следует обращаться с Util , SetStart и StartPoint , я закодировал их вручную:

 var pattern = @"Util.SetStart(([^,s] )s*,s*([^,s] ));";
var text = "Util.SetStart(someObject, somePoint);";

var a = Regex.Replace(text, pattern, m => m.Groups[1]   ".StartPoint = "   m.Groups[2]);
  

Включить эти 3 функции в регулярное выражение не должно быть слишком сложно, но я не знаю, какому шаблону я должен следовать при переименовании, например, SetStart в StartPoint .

Комментарии:

1. Блестяще — спасибо. Я надеялся сделать это с помощью find / replace, но я преобразоваю это в VB, чтобы я мог использовать его как макрос. И да, я собирался использовать жесткий код в зависимости от того, был ли это SetStart или SetEnd или что-то еще — это было на 99% автоматизировано, мне просто нужен был способ захватить SomeObject и somePoint, чтобы я мог перетасовать их.