CI

CI

  • NA
  • 25
  • 0

Fun with Regular Expressions (or not...)

Jul 16 2004 11:22 AM
Hi, I'm trying to replace some text in an html file based on some regular expressions (or literal text) in a text file. What should happen is that "A0-123456" in the html file should get replaced by: "A0-123456" and "B6-1234" in the html file should get replaced by: "B6-1234" and so on... Here's what I'm doing: static void Main(string[] args) { /* For following code: * i - input; c - config; o - output; * Therefore, isr - input streamreader, csr - config streamreader, * cline - config line, iline - input line */ String ifile = "data.html"; String cfile = "config.txt" String ofile = "newdata.html"; // output file name string cline; string iline=""; try { // open a StreamReader to read in the input file using (StreamReader isr = new StreamReader(ifile)) { // Read in the entire input file into a single string iline = isr.ReadToEnd(); // open another StreamReader to read in the config file using (StreamReader csr = new StreamReader(cfile)) { // open a StreamWriter to write out to the output file using (StreamWriter sw = new StreamWriter(ofile)) { // Read in the config file, one line at a time. // Each line corresponds to an expression to be matched // in the input file while ((cline = csr.ReadLine()) != null) { // Set every line of the config file as the // regular expression to be tested for Regex testExp = new Regex( cline ); /* // Setup the replacement string // INSTEAD OF cline, USE MATCHED VALUE string replaceString = "" + cline + ""; */ if (iline != null) { // Replace all matched expressions with the // appropriate function Match m = Regex.Match( iline, cline ); String replaceString = "" + m.ToString() + ""; m = m.NextMatch(); iline = testExp.Replace( iline, replaceString ); Console.WriteLine(iline); }// end if iline } // end while cline // Write the replaced text back to the output file // using the StreamWriter sw.Write(iline); } // end using streamwriter sw } // end using StreamReader csr } // end using StreamReader isr } // End Try block catch (Exception e) { Console.WriteLine("The file could not be read:"); Console.WriteLine(e.Message); } // End catch block } // End Main Now the problem is that ALL matches of a regular expression in the config file (say "[A-Z,a-z]\d-\d{4,8}", which matches "A0-1234", "B6-12345678", "D4-12345" etc) get replaced by the first match... So if the first expr matched in the input html file is "A0-1234", then all other expressions in the html file get replaced by : "A0-123456" even if those expressions are "B4-12345", "T6-886745" or anything else that matches "[A-Z,a-z]\d-\d{4,8}" Please help.....