Ответ Эд показал рабочий шаблон, поскольку чередование не поддерживается в Notepad ++, однако остальная часть вашей проблемы не может быть решена одним регулярным выражением. То, что вы пытаетесь сделать, невозможно с помощью регулярного выражения поиск / замена. Ваш желаемый результат включает в себя логические условия, которые не могут быть выражены в регулярном выражении. Все, что вы можете сделать с методом замены, это переупорядочить элементы и обратиться к захваченным элементам, но вы не можете сказать ему использовать «A» для значений 1-3 и «B» для 4-6. Кроме того, вы не можете назначать такие заполнители. Это действительно группы, на которые вы ссылаетесь.
Чтобы достичь результатов, которые вы показали, вам нужно написать небольшую программу, которая позволит вам проверять захваченные значения и выполнять соответствующие замены.
РЕДАКТИРОВАТЬ: вот пример того, как добиться этого в C #
var numToWordMap = new Dictionary<int, string>();
numToWordMap[1] = "A_One";
numToWordMap[2] = "A_Two";
numToWordMap[3] = "A_Three";
numToWordMap[4] = "B_One";
numToWordMap[5] = "B_Two";
numToWordMap[6] = "B_Three";
string pattern = @"\bMyLabel_(\d+)\b";
string filePath = @"C:\temp.txt";
string[] contents = File.ReadAllLines(filePath);
for (int i = 0; i < contents.Length; i++)
{
contents[i] = Regex.Replace(contents[i], pattern,
m =>
{
int num = int.Parse(m.Groups[1].Value);
if (numToWordMap.ContainsKey(num))
{
return "Label_" + numToWordMap[num];
}
// key not found, use original value
return m.Value;
});
}
File.WriteAllLines(filePath, contents);
Вы должны быть в состоянии использовать это легко. Возможно, вы можете загрузить LINQPad или Visual C # Express , чтобы сделать это.
Если ваши файлы слишком велики, это может быть неэффективным подходом, в этом случае вы можете использовать StreamReader
и StreamWriter
для чтения из исходного файла и записи его в другой, соответственно.
Также помните, что мой пример кода записывает обратно в исходный файл. В целях тестирования вы можете изменить этот путь на другой файл, чтобы он не перезаписывался.