Приведенный ниже код взят из моих других вопросов, которые я задавал здесь, на SO. Все были очень полезны, и я почти понимаю RegEx, но столкнулся с другим препятствием.
Это то, что мне нужно сделать в двух словах. Мне нужно взять эту строку, которая находится в текстовом файле, который я загружаю в переменную содержимого:
X17.8Y-1.Z0.1G0H1E1
Мне нужно сделать поиск по шаблону для значения X, значения Y, значения Z и значения H. Когда я закончу, мне нужно записать это обратно в мой текстовый файл (я знаю, как создать текстовый файл, чтобы это не было проблемой).
X17.8Y-1.G54G0T2
G43Z0.1H1M08
У меня есть код, который мне дали добрые пользователи, за исключением того, что мне нужно создать значение T в конце первой строки, использовать значение из H и увеличить его на 1 для значения T. Например:
X17.8Y-1.Z0.1G0H5E1
будет переводиться как:
X17.8Y-1.G54G0 T6
G43Z0.1H5M08
Значение T равно 6, потому что значение H равно 5.
У меня есть код, который делает все (выполняет две функции RegEx и разделяет строку кода на две новые строки и добавляет некоторые новые значения G). Но я не знаю, как добавить значение T обратно в первую строку и увеличить его на 1 от значения H. Вот мой код:
StreamReader reader = new StreamReader(fDialog.FileName.ToString());
string content = reader.ReadToEnd();
reader.Close();
content = Regex.Replace(content, @"X[-\d.]+Y[-\d.]+", "$0G54G0");
content = Regex.Replace(content, @"(Z(?:\d*\.)?\d+)[^H]*G0(H(?:\d*\.)?\d+)\w*", "\nG43$1$2M08"); //This must be created on a new line
Этот код прекрасно работает при взятии:
X17.8Y-1.Z0.1G0H5E1
и превращаем его в:
X17.8Y-1.G54G0
G43Z0.1H5M08
но мне нужно, чтобы это превратилось в:
X17.8Y-1.G54G0 * * T6 тысяча пятьдесят-одна * 1 052 *
G43Z0.1H5M08
(обратите внимание, что значение T добавляется к первой строке, которая является значением H +1 (T = H + 1).
Может кто-нибудь изменить мое заявление в RegEx, чтобы я мог сделать это автоматически? Я пытался объединить свои два оператора RegEx в одну строку, но я потерпел неудачу.
Update1 : Стивен в комментариях ниже предлагает: «В регулярном выражении нет арифметических операторов, вам нужно использовать группу, чтобы извлечь значение H, превратить его в int, добавить одно и построить новую строку. Но я понятия не имею, как это сделать в коде C #.