【发布时间】:2010-05-11 00:26:43
【问题描述】:
以下代码来自我在 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.G54G0T6
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.G54G0T6
G43Z0.1H5M08
(注意T值被添加到第一行,即H值+1 (T = H + 1)。
有人可以修改我的 RegEx 语句,以便我可以自动执行此操作吗?我试图将我的两个 RegEx 语句合并为一行,但我失败了。
Update1:Stephen 在下面的 cmets 中建议,“正则表达式中没有算术运算符,您需要使用一个组来提取 H值,将其转换为 int,加一并构建一个新字符串。”。但我不知道如何在 C# 代码中执行此操作。
【问题讨论】:
-
没有必要在标题中加上“C#”,因为你已经在标签中找到了它。此外,C# 不支持正则表达式,因此关于“C# Regex”的问题没有任何意义。
-
AFAIK,正则表达式中没有算术运算符,您需要使用一个组来提取 H 值,将其转换为 int,添加一个并构建一个新字符串。
-
@Stephen 我将如何在代码中执行此操作?谢谢。
-
@JohnSaunders 感谢您的提醒。
标签: c# regex replace find wildcard