#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, чтобы я мог перетасовать их.