C# 使用正则表达式用通配符类型搜索查找并替换字符串的一部分(同时保留一些文本)

C# 使用正则表达式用通配符类型搜索查找并替换字符串的一部分(同时保留一些文本),c#,regex,replace,find,wildcard,C#,Regex,Replace,Find,Wildcard,我试图用不同的文本替换字符串中的一些文本,同时保留一些文本,但在执行时遇到了问题 我的代码是: 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", "

我试图用不同的文本替换字符串中的一些文本,同时保留一些文本,但在执行时遇到了问题


我的代码是:

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.5G0H5E1

我需要添加新文本,但也需要将H5和Z0.5添加回文本中,例如:

G54G43Z0.5H5M08


但是Z值和H值每次都会不同,所以我需要捕获这些值,并在添加新的G54G43值时将它们重新插入到字符串中



有人能告诉我如何使用Regex.Replace执行此操作吗?

如果字符串只包含序列号(?),则最简单的方法是逐个提取参数,并将其构建为字符串。(您可能需要为
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)(number)(不是H…)(H)(number)(更多的字母…)

如果字符串只包含序列号(?),则最容易逐个提取参数,并将其构建为字符串。(您可能需要为
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");

regex的基本意思是:(Z)(number)(不是H…)(H)(number)(更多的字母…)

我想补充一下:这些规范缺少很多细节,很容易忽略您的需求。
G54G4…M08
是固定字符串吗?是作为整个字符串来的,还是作为更多文本的一部分来的?Z前面可以有字符吗?另外,请注意,在第一种情况下不需要正则表达式,您可以执行
content=content.Replace(“M2”、“M3”)我想补充:这些规范缺少很多细节,很容易错过您的需求。
G54G4…M08
是固定字符串吗?是作为整个字符串来的,还是作为更多文本的一部分来的?Z前面可以有字符吗?另外,请注意,在第一种情况下不需要正则表达式,您可以执行
content=content.Replace(“M2”、“M3”)