GIve мне несколько советов относительно замены подстрок в строке.Замена некоторого подстроки внутри строки
На входе у меня есть исходная строка (это всегда код C#) и NewName (MyGood).
начальная строка:
using System;
using Meorfi.Core;
using Meorfi.ViewModel.Shared;
using Meorfi.ViewModel.Shared.Base;
using Meorfi.Wrapper.Base;
namespace Meorfi.ViewModel {
public partial class ViewModel {
public ViewModel() {
Initialize();
}
}
}
На выходе она должна быть следующая строка:
using System;
using Meorfi.Core;
using Meorfi.ViewModel.Shared;
using Meorfi.ViewModel.Shared.Base;
using Meorfi.Wrapper.Base;
namespace Meorfi.ViewModel {
public partial class MyGoodViewModel {
public MyGoodViewModel() {
Initialize();
}
}
}
Вопрос заключается в том: как заменить только имя класса, и это конструктор.
1) using string.Replace ("ViewModel", "MyGoodViewModel"); Я буду иметь:
using System;
using Meorfi.Core;
using Meorfi.MyGoodViewModel.Shared;
using Meorfi.MyGoodViewModel.Shared.Base;
using Meorfi.Wrapper.Base;
namespace Meorfi.MyGoodViewModel {
public partial class MyGoodViewModel {
public MyGoodViewModel() {
Initialize();
}
}
}
2) вместо "public partial class ViewModel
" с "public partial class MyGoodViewModel
" и
"public ViewModel(
" с "public MyGoodViewModel(
" (предполагая, что есть больше Конструкторы), позволит решить проблему,
, но если будут какие-то более пустых пространств «общественности _ парциальное __ класса _ ViewModel» или "public ViewModel _ ( "
где ' _' - это пробелы, не будет хорошего решения.
Я хочу сделать это очень элегантно. Может быть, я должен использовать Regex для этого?
Заранее спасибо.
Редактировать: Основываясь на ответе Andrew, я решил проблему. (Решение следует)
private string ReplaceNames(string code, string newName, string oldName) {
var classNamePattern = @"(?<=class\s)\s*\b" + oldName;
var ctorPattern = @"(?<=public\s)\s*\b" + oldName;
var updatedCode = Regex.Replace(code, classNamePattern, newName, RegexOptions.IgnoreCase);
var match = new Regex(ctorPattern).Match(updatedCode);
if (match.Success) {
updatedCode = Regex.Replace(updatedCode, ctorPattern, newName, RegexOptions.IgnoreCase);
return updatedCode;
}
return code;
}
Спасибо всем!
Поиск индекса п пространства имен и не заменяет, начиная с этого индекса. – Tommi
Если это всегда код C#, почему вы не можете использовать функцию переименования Visual Studio? –