我正在尝试将以下模式中的字符串与正则表达式匹配。
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]);
}
这正确匹配“Emma”和“The Last leaf”,但第三场比赛是“Gulliver”。但理想的比赛是“格列佛的旅行”。我如何为这样的模式构建正则表达式?
答案 0 :(得分:4)
由于,
是您的分隔符,您可以尝试更改此模式。它应该工作。
string pattern = @"'(.*?)'(?:,|$)";
这种方式的工作方式是,它会查找单引号后跟逗号或行尾。
答案 1 :(得分:2)
我认为这可以作为正则表达式使用'(.*?)',|'(.*)'
。
答案 2 :(得分:1)
您可以考虑使用后视/向前看:
"(?<=^'|',').*?(?='$|',')"
使用grep进行测试:
kent$ echo "'Emma','The Last Leaf','Gulliver's travels'"|grep -Po "(?<=^'|',').*?(?='$|',')"
Emma
The Last Leaf
Gulliver's travels
答案 3 :(得分:0)
你不能,如果你有单引号分隔的字符串而Gulliver's
包含一个未转义的引号,则无法将其与字符串的结尾区分开来。您可以随时用逗号分隔它并从任意一侧修剪'
但我不确定这是您想要的:
string text = "'Emma','The Last Leaf','Gulliver's travels'";
foreach(string s in text.split(new char[] {','})) {
Console.WriteLine(s.Trim('\''));
}