我开始掌握正则表达式,多亏了 SO 上其他问题的众多帮助。但是我仍然卡在这个问题上:
我的代码是:
我正在读取一个文本文件,我想搜索并更改此文本(我的文本文件中X和Y值总是相互跟随):
X17.8Y-1.
但是这个文本也可以是X16.1Y2.3(值在X和Y之后始终不同)
我想把它改成这样
X17.8Y-1.G54 或 X(value)Y(value)G54
我的正则表达式语句如下,但它没有起作用。
有人可以帮我修改一下吗,使它能够搜索X(通配符)Y(通配符),并用X(值)Y(值)G54替换它吗?
我的代码是:
StreamReader reader = new StreamReader(fDialog.FileName.ToString());
string content = reader.ReadToEnd();
reader.Close();
我正在读取一个文本文件,我想搜索并更改此文本(我的文本文件中X和Y值总是相互跟随):
X17.8Y-1.
但是这个文本也可以是X16.1Y2.3(值在X和Y之后始终不同)
我想把它改成这样
X17.8Y-1.G54 或 X(value)Y(value)G54
我的正则表达式语句如下,但它没有起作用。
content = Regex.Replace(content, @"(X(?:\d*\.)?\d+)*(Y(?:\d*\.)?\d+)", "$1$2G54");
有人可以帮我修改一下吗,使它能够搜索X(通配符)Y(通配符),并用X(值)Y(值)G54替换它吗?
"X-17--2..3.-Y-...1."
这样的字符串,我认为他不想要这种情况。他在问题中最初提出的正则表达式专门过滤非数字表达式(它只接受像 .5 或 2.3 或 44 这样的数字)。这难道不会引入错误的匹配吗? - Chris Schmich@"(X-?(?:\d*\.)?\d+)*(Y-?(?:\d*\.)?\d+)"
,它支持问题中的两个示例,并仍然拒绝其他我认为应该被拒绝的情况(请参见我的上面的示例)。换句话说,我可以提出一个正则表达式X.*?Y.*?
,它可以解决他的问题,但也会引入许多新问题。 - Chris Schmichcontent = Regex.Replace(content, @"(X-?(\d+\.\d+|\d+\.|\.\d+|\d+))(Y-?(\d+\.\d+|\d+\.|\.\d+|\d+))", "$0G54");
。它更冗长,但覆盖了所有情况并拒绝了其余部分。 - Chris Schmich