8.10. Returning the Entire Line in Which a Match Is Found

Problem

You have a string or file that contains multiple lines. When a specific character pattern is found on a line, you want to return the entire line, not just the matched text.

Solution

Use the StreamReader.ReadLine method to obtain each line in a file in which to run a regular expression against:

public static ArrayList GetLines(string source, string pattern, bool isFileName) { string text = source; ArrayList matchedLines = new ArrayList( ); // If this is a file, get the entire file's text if (isFileName) { FileStream FS = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.Read); StreamReader SR = new StreamReader(FS); while (text != null) { text = SR.ReadLine( ); if (text != null) { // Run the regex on each line in the string Regex RE = new Regex(pattern, RegexOptions.Multiline); MatchCollection theMatches = RE.Matches(text); if (theMatches.Count > 0) { // Get the line if a match was found matchedLines.Add(text); } } } SR.Close( ); FS.Close( ); } else { // Run the regex once on the entire string Regex RE = new Regex(pattern, RegexOptions.Multiline); MatchCollection theMatches = RE.Matches(text); // Get the line for each match foreach (Match m in theMatches) { int lineStartPos = GetBeginningOfLine(text, m.Index); int lineEndPos = GetEndOfLine(text, (m.Index + m.Length - 1)); string line = text.Substring(lineStartPos, lineEndPos - lineStartPos); matchedLines.Add(line); } } return (matchedLines); } public ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.