10.8. 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, as shown in Recipe 10.8.
Example 10-8. Returning the entire line in which a match is found
public static List<string> GetLines(string source, string pattern, bool isFileName) { string text = source; List<string> matchedLines = new List<string>( ); // If this is a file, get the entire file's text. if (isFileName) { using (FileStream FS = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.Read)) { using (StreamReader SR = new StreamReader(FS)) { Regex RE = new Regex(pattern, RegexOptions.Multiline); while (text != null) { text = SR.ReadLine( ); if (text != null) { // Run the regex on each line in the string. MatchCollection theMatches = RE.Matches(text); if (theMatches.Count > 0) { // Get the line if a match was found. matchedLines.Add(text); } } } } } } else { // Run the regex once on the entire string. Regex RE = new Regex(pattern, RegexOptions.Multiline); MatchCollection theMatches = RE.Matches(text); // Use these vars to remember the last line added to matchedLines // so that we do not add duplicate lines. int lastLineStartPos = -1; int lastLineEndPos = -1; // Get the line for each match. foreach (Match m in theMatches) ...
Get C# 3.0 Cookbook, 3rd Edition 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.