Find and Replace RegEx with wildcard search and addition of value

Posted by fraXis on Stack Overflow See other posts from Stack Overflow or by fraXis
Published on 2010-05-11T00:26:43Z Indexed on 2010/05/11 0:44 UTC
Read the original article Hit count: 427

Filed under:
|
|
|
|

The below code is from my other questions that I have asked here on SO. Everyone has been so helpful and I almost have a grasp with regards to RegEx but I ran into another hurdle.


This is what I basically need to do in a nutshell. I need to take this line that is in a text file that I load into my content variable:


X17.8Y-1.Z0.1G0H1E1


I need to do a wildcard search for the X value, Y value, Z value, and H value. When I am done, I need this written back to my text file (I know how to create the text file so that is not the problem).


X17.8Y-1.G54G0T2
G43Z0.1H1M08


I have code that the kind users here have given me, except I need to create the T value at the end of the first line, and use the value from the H and increment it by 1 for the T value. For example:


X17.8Y-1.Z0.1G0H5E1

would translate as:

X17.8Y-1.G54G0T6
G43Z0.1H5M08

The T value is 6 because the H value is 5.



I have code that does everything (does two RegEx functions and separates the line of code into two new lines and adds some new G values). But I don't know how to add the T value back into the first line and increment it by 1 of the H value. Here is my code:

  StreamReader reader = new StreamReader(fDialog.FileName.ToString());
  string content = reader.ReadToEnd();
  reader.Close();

  content = Regex.Replace(content, @"X[-\d.]+Y[-\d.]+", "$0G54G0");
  content = Regex.Replace(content, @"(Z(?:\d*\.)?\d+)[^H]*G0(H(?:\d*\.)?\d+)\w*", "\nG43$1$2M08"); //This must be created on a new line



This code works great at taking:

X17.8Y-1.Z0.1G0H5E1

and turning it into:

X17.8Y-1.G54G0
G43Z0.1H5M08



but I need it turned into this:


X17.8Y-1.G54G0T6
G43Z0.1H5M08

(notice the T value is added to the first line, which is the H value +1 (T = H + 1).

Can someone please modify my RegEx statement so I can do this automatically? I tried to combine my two RegEx statements into one line but I failed miserably.

© Stack Overflow or respective owner

Related posts about c#

Related posts about find