查找并替换RegEx问题

时间:2010-05-10 22:06:45

标签: c# regex replace find wildcard

由于我在其他问题上对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?

5 个答案:

答案 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");