Я разбираю файл, содержащий операторы построчно. Я хочу:
- Определить все строки, содержащие назначения.
- Заменить идентификаторы определенных типов (вход и выход).
Строка является назначениемесли он имеет одну из следующих двух форм:
DataType Identifier = ...
Identifier = ...
Тип данных должен быть одним из: «R», «L», «H», «X», «I». Тип данных не является обязательным. Пробелы разрешены в любой позиции вокруг DataType и Идентификатора. Пример строк, содержащих операторы:
L Input = ...
DigitalOutput = ...
R Output= ...
H AnalogInput=...
X Output = ...
Ожидаемый результат после синтаксического анализа приведенных выше операторов будет:
L Deprecated = ...
DigitalOutput = ...
R Deprecated= ...
H AnalogInput=...
X Deprecated = ...
Файл также содержит другие операторы, кроме присваиваний, поэтому важно идентифицировать строки с присвоениямии только заменить идентификаторы в этом случае. Я пытался использовать регулярное выражение с положительным взглядом и положительным взглядом:
public void ReplaceIdentifiers(string line)
{
List<string> validDataTypes = new List<string>{"R", "L", "H", "X", "I"};
List<string> identifiersToReplace = new List<string>{"Input", "Output"};
string = ...
Regex regEx = new Regex(MyRegEx);
regEx.Replace(line, "Deprecated");
}
Где MyRegex находится на форме (псевдокод):
$@"(?<=...){Any of the two identifiers to replace}(?=...)"
Взгляд назад:
Start of string OR
Zero or more spaces, Any of the valid data types, Zero or more spaces OR
Zero or more spaces
Взгляд в будущее:
Zero or more spaces, =
Мне не удалось получить правильное регулярное выражение. Как мне написать регулярное выражение?