gpt4 book ai didi

c# - 使用正则表达式查找和替换标识符

转载 作者:行者123 更新时间:2023-11-30 21:26:49 25 4
gpt4 key购买 nike

我正在逐行解析包含语句的文件。我想:

  1. 确定所有包含作业的行。
  2. 替换某些类型(输入和输出)的标识符。

如果一行具有以下两种形式之一,则它是一个赋值:

DataType Identifier = ...
Identifier = ...

数据类型必须是以下之一:“R”、“L”、“H”、“X”、“I”。数据类型是可选的。 DataType 和 Identifier 周围的任何位置都允许有空格。包含语句的行示例:

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, =

我还没弄好正则表达式。如何编写正则表达式?

最佳答案

由于 .NET regex 支持非固定长度 Lookbehind,您可以使用以下模式:

(?<=^\s*(?:[RLHXI]\s+)?)(?:Input|Output)(?=\s*=)

并替换为 Deprecated

Regex demo .

C# 示例:

string input = "L Input = ...\n" +
"DigitalOutput = ...\n" +
" R Output= ...\n" +
"H AnalogInput=...\n" +
" X Output = ...\n" +
"IOutput = ...\n" +
"Output = ...";

Regex regEx = new Regex(@"(?<=^\s*(?:[RLHXI]\s+)?)(?:Input|Output)(?=\s*=)",
RegexOptions.Multiline);
string output = regEx.Replace(input, "Deprecated");
Console.WriteLine(output);

输出:

L Deprecated = ...
DigitalOutput = ...
R Deprecated= ...
H AnalogInput=...
X Deprecated = ...
IOutput = ...
Deprecated = ...

Try it online .

关于c# - 使用正则表达式查找和替换标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58725216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com