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”)代码>