我正在尝试使用不同的文本替换字符串中的某些文本,同时保留一些文本,而我在执行此操作时遇到了问题。
我的代码是:
StreamReader reader = new StreamReader(fDialog.FileName.ToString());
string content = reader.ReadToEnd();
reader.Close();
/Replace M2 with M3 (this works fine)
content = Regex.Replace(content, "M2", "M3");
我想替换包含此字符串的字符串:
Z0.1G0H1E1
并将其转换为:
G54G43Z.1H1M08
(注意Z值和H值在文本更改前包含相同的数值)
我遇到的麻烦是,当我替换值时,我需要保留第一组文本中的H值和Z值。
例如,
Z0.5 G0的 H5 E1
我需要添加新文本,还要将H5和Z0.5添加回文本中,例如:
G54G43的 Z0.5 H5 M08
但是Z值和H值每次都会不同,所以我需要捕获这些值,并在添加新的G54G43值时将它们重新插入字符串。
有人可以告诉我如何使用Regex.Replace吗?
答案 0 :(得分:1)
如果字符串只包含序列号 (?) ,则最简单的方法是逐个提取参数,并将它们构建为字符串。 (您可能想为Regex.Match
行创建一个函数,它们几乎相同)。此版本不假设Z和H之间的任何顺序:
string s = "Z0.5G0H5E1";
string zValue = Regex.Match(s, @"Z(\d*\.)?\d+").Value;
string hValue = Regex.Match(s, @"H(\d*\.)?\d+").Value;
s = String.Format("G54G43{0}{1}M08", zValue, hValue);
如果您的序列号为 (?) 的字符串,您也可以使用Regex.Replace
:
string s = "hello world Z0.5G0H5E1 this is a string";
s = Regex.Replace(s, @"(Z(?:\d*\.)?\d+)[^H]*(H(?:\d*\.)?\d+)\w*",
"G54G43$1$2M08");
该正则表达式基本上意味着:(Z)(数字)(不是H ...)(H)(数字)(还有一些字母......)