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