由于我在其他问题上对SO的所有重要帮助,我开始掌握RegEx。但我仍然对这个感到厌烦:
我的代码是:
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(值)Y(值)G54
我的RegEx声明如下,但它无效。
content = Regex.Replace(content, @"(X(?:\d*\.)?\d+)*(Y(?:\d*\.)?\d+)", "$1$2G54");
有人可以为我修改它以便它可以工作并搜索X(通配符)Y(通配符)并将其替换为X(值)Y(值)G54?
答案 0 :(得分:2)
您需要的正则表达式是:
X[-\d.]+Y[-\d.]+
以下是如何在C#中使用它:
string content = "foo X17.8Y-1. bar";
content = Regex.Replace(content, @"X[-\d.]+Y[-\d.]+", "$0G54");
Console.WriteLine(content);
输出:
foo X17.8Y-1.G54 bar
答案 1 :(得分:1)
要对输入感到挑剔,可以使用
string num = @"-?(?:\d+\.\d+|\d+\.|\.\d+|\d+)";
content = Regex.Replace(content, "(?<x>X" + num + ")(?<y>Y" + num + ")", "${x}${y}G54");
Y值是否有可靠的终止符?说它是空白:
content = Regex.Replace(content, @"(X.+?)(Y.+?)(\s)", "$1$2G54$3");
代码需要多强大?如果它正在重写调试输出或其他一些快速而肮脏的任务,请保持简单。
答案 2 :(得分:1)
文本文件中的“X(值)Y(值)”之后会出现什么?空间?换行?另一个“X(值)Y(值)”值对?
我在正则表达式中使用快捷方式不是很好,比如\ d,我也不熟悉.NET,但是我使用了以下正则表达式匹配值对:
(X[0-9.-]+Y[0-9.-]+)
替换是
$1G54
只要值对没有直接后跟数字,句点或短划线,这将有效。
答案 3 :(得分:0)
我知道这不会直接回答您的问题,但您应该查看Expresso。它是一个.NET正则表达式工具,允许您调试,测试和微调复杂的表达式。这是一个救生员。
更多的自己动手回答,但即使有人在这里给你答案,它也会有所帮助。
答案 4 :(得分:0)
看起来你只需要支持可选的负值:
content = Regex.Replace(content, @"(X-?(?:\d*\.)?\d+)*(Y-?(?:\d*\.)?\d+)", "$1$2G54");