Search code examples
c#.netregexescapingquotes

Using Regex to match quoted string with embedded, non-escaped quotes


I am trying to match a string in the following pattern with a regex.

string text = "'Emma','The Last Leaf','Gulliver's travels'";
string pattern = @"'(.*?)',?";

foreach (Match match in Regex.Matches(text,pattern,RegexOptions.IgnoreCase))
 {
    Console.WriteLine(match + " " + match.Index);
    Console.WriteLine(match.Groups[1].Captures[0]);
 }

This matches "Emma" and "The Last leaf" correctly, however the third match is "Gulliver". But the desired match is "Gulliver's travels". How can I build a regex for a patterns like this?


Solution

  • Since , is your delimiter, you can try changing your pattern like this. It should work.

    string pattern = @"'(.*?)'(?:,|$)"; 
    

    The way this works is, it looks for a single quote followed by a comma or end of the line.