Просто для ясности, прежде чем я начну свой запрос, у меня есть пример C-кода, который я пытаюсь изменить с помощью регулярных выражений C #. Я не задаю вопрос о C, я просто использую C # для автоматической генерации C-файла с использованием регулярных выражений.
Я пытаюсь написать регулярное выражение, которое заменит подстроку между двумя совпадающими строками (тегами). Я следовал вместе с этим вопросом , но я думаю, что потерпел неудачу, потому что мои «теги» принимают форму блочных комментариев в стиле C (с обратными слешами и звездочками, которые являются специальными символами в регулярном выражении). В конечном итоге это будет использоваться для автоматизации замены определенных значений в исходном файле на языке C.
Это пример некоторых моих C-кодов:
SetKeyString("modelNumber", /* #ModelNumber#*/ config.modelNumber /*#ModelNumber#*/);
config.maxKV = /*#MaxKV#*/ 88.88 /*#MaxKV#*/;
Я хочу заменить config.modelNumber
и 88.88
новыми значениями, полученными извне из файла XML.
Предположим, данные из моего XML-файла:
<ModelNumber>ABCDE</ModelNumber>
<MaxKV>99.99</MaxKV>
Полученный C-код должен быть
SetKeyString("modelNumber", /*#ModelNumber#*/ ABCDE /*#ModelNumber#*/);
config.maxKV = /*#MaxKV#*/ 99.99 /*#MaxKV#*/;
Это регулярное выражение, которое я сейчас использую, чтобы попытаться (и с треском провалился) в этом.
string x = Regex.Replace(mainLines[i], @String.Format(@"?<=/*#{0}#*/)(\w+?)(?=/*#{0}#*/)", property.Name), "middle");
mainLines
- отдельные строки моего C-файла, а property.Name
- имя тега XML: ModelNumber
или MaxKV
(без символов на концах).
Обновление - Дополнительные примеры
Во время дальнейшего тестирования предлагаемых решений были обнаружены крайние случаи отказов, поэтому вот дополнительные примеры входных данных, которые привели к сбоям:
config.kvRampRate = /*#KVRampRate#*/ (10.0 / config.maxKV * 4095) / 12.124567719929887 /*#KVRampRate#*/;
config.maRampRate = /*#MARampRate#*/ 1.0/config.maxMA * 4095 / /*mARampRate-->*/87.80017152658661 /*#MARampRate#*/;