【发布时间】:2011-12-04 02:05:19
【问题描述】:
我正在尝试将以下模式中的字符串与正则表达式匹配。
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”。但理想的匹配是“格列佛游记”。如何为这样的模式构建正则表达式?
【问题讨论】:
-
更多的是语言问题:)
-
如果您在输入字符串中添加逗号,您可以去掉导致错误匹配的
,?中的?。您是否无法获得正确转义的输入字符串?如果这本书真的被命名为"Gulliver','s travels",你会怎么做? -
您可以使用平衡分组 (blogs.msdn.com/b/bclteam/archive/2005/03/15/396452.aspx) 处理嵌套字符。但是,嵌套字符并不是最糟糕的问题。真正的问题是
Gulliver's中的撇号没有被转义。这确实使解析器的规则难以定义。 -
@Steve:我认为撇号是 OP 所说的,而这根本与嵌套无关。我从标题中删除了“嵌套”一词。
标签: c# .net regex escaping quotes