|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
В проге в различных местах присутствуют строки вида Код: sql 1. 2. 3. 4.
Нужно сделать замену var0 во всех этих строках при изменении его имени на любое другое (но не трогать подстроки вида kvar0 или var01) C regexoм знаком слабо, поэтому родил пока наспех такого уродца: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Потестировал на нескольких примерах, вроде проблему решает, но! Есть несколько вопросов: 1. Нормальный паттерн? 2. Как запулить в MatchEvaluatorMethod значения a и b? 3. Что лучше: использовать статический метод Regex.Replace или создать один объект Regex для ковыряния большого числа строк? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 12:41 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Pallaris, чем String.Replace не подходит? Обязательно хотите с регуляркой? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 13:07 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
user7320, потому что автор(но не трогать подстроки вида kvar0 или var01) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 13:11 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Pallarisuser7320, потому что автор(но не трогать подстроки вида kvar0 или var01) Так можно проверять наличие символа k перед подстрокой или 1 после подстроки ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 13:24 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Ваше решение решает проблему с "kvar0 или var01"? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 13:26 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Belavik, ну да ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 13:28 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
BelavikТак можно проверять наличие символа k перед подстрокой или 1 после подстроки Символ k и 1 - только для примера. Там могут быть любые буквы или цифры - в этом случае менять нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 13:29 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Вот, глянул в сторону substitution, получилось без унылого делегата Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 13:50 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
PallarisВот, глянул в сторону substitution, получилось без унылого делегата Код: c# 1. 2. 3. 4. 5. 6. 7.
А если без рег.выражений: 1. Если в начале строки "var0." заменять на newvalue + "." 2. Любые ".var0." заменять на "." + newvalue + "." если я правильно задание понял ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 16:16 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Belavik, вместо точки могут быть самые разные символы: +,-,*,/,),: и т.д. И вообще может не быть символа ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 16:31 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Я не понимаю до сих пор, чем string.Replace не подходит. Или заменять надо именно переменные - т. е. с пониманием, где код, а где комменты или часть имени переменной - такое заменять не надо? Если тупо пропарсить текст - то string.Replace, а если отрефакторить - то штатными средствами Студии по замену имён переменных. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 16:44 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
user7320, в проге есть что-то типа скриптового языка, где используются внутренние объекты с именами (var0, var1 и т.д.) Вот мне надо дать возможность рефакторинга, чтоб если я меняю имя объекта, то во всех скриптах оно тоже поменялось - при этом не повредив другие имена типа zzzvar0, var0zzz и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 16:50 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Pallarisuser7320, в проге есть что-то типа скриптового языка, где используются внутренние объекты с именами (var0, var1 и т.д.) Вот мне надо дать возможность рефакторинга, чтоб если я меняю имя объекта, то во всех скриптах оно тоже поменялось - при этом не повредив другие имена типа zzzvar0, var0zzz и т.д. А, понятно - нужен парсер со знанием морфологии (кажется, это так называется?) языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 17:10 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Pallarisuser7320, в проге есть что-то типа скриптового языка, где используются внутренние объекты с именами (var0, var1 и т.д.) Вот мне надо дать возможность рефакторинга, чтоб если я меняю имя объекта, то во всех скриптах оно тоже поменялось - при этом не повредив другие имена типа zzzvar0, var0zzz и т.д.а одноименные локальные переменные надо учитывать (и не менять)? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 17:34 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Яростный Меч, хм, слава Б-гу у меня такого понятия нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 18:06 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Pallaris, ну тогда тебе надо определиться, из каких символов может состоять название переменной. допустим, это латинские буквы, цифры и подчеркивание. тогда Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 18:22 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Яростный Меч, Ну да, но вроде мой паттерн по смыслу такой же, но короче. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 18:42 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Только подчеривание у меня не хватает, точно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 18:44 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Pallaris3. Что лучше: использовать статический метод Regex.Replace или создать один объект Regex для ковыряния большого числа строк? Статические методы кэшируют скомпилированные значения паттерна. Поэтому повторные обращения к ним будут быстрее. В то время как при создании объекта регекса это будет происходить каждый раз. Следовательно, если ковыряния будут происходить не один раз, то экземпляр регекса (если остановить свой выбор на этом способе) лучше сделать полем класса. Также следует учесть, что статические методы кэшируют по умолчанию только 15 последних паттернов. Если их будет больше 15, то первые будут теряться, и заново перекомпилироваться. Можно изменить значение свойства CacheSize. Или перейти на экземпляр. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 19:16 |
|
Regex помогите сделать простой refactoring
|
|||
---|---|---|---|
#18+
Ну и конечно, стоит использовать параметр RegexOptions.Compiled, если регулярка используется много раз - это ускорит её работу (ценой затраты на предварительную компиляцию). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 19:20 |
|
|
start [/forum/topic.php?fid=20&tid=1402956]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 327ms |
total: | 475ms |
0 / 0 |