我在这里找到了一个解析正则表达式的引文:http://linklens.blogspot.com.au/2009/04/citation-parsing-regular-expression.html并且它在http://www.regexr.com测试它时工作正常,但是在尝试在c#中使用 Regex.Match
时它无效 .
这是表达式(带有转义的“”“) - 从c#评估并在regexr中重新测试 .
/([^e][^d][^s][^\.]\s|\d+\.?\s|^)([A-Z][a-z]{1,},?((\s[A-Z](\.|,|\.,))(\s?[A-Z](\.|,|\.,))*))(\s?(,|and|&|,\s?and)?\s?([A-Z][a-z]{1,},?((\s[A-Z](\.|,|\.,))(\s?[A-Z](\.|,|\.,))*)))*\s*(\(?\d\d\d\d\)?\.?)?\s*(\""|“)?((([A-Za-z:,\r\n]{2,}\s?){3,}))\.?(\""|”)?/g
熟悉正则表达式的人是否会注意到在这个相当复杂的表达式中可能与c#不兼容的任何内容?
编辑:
使用一些文本引用链接到regexr示例:http://regexr.com/3a232
var myMatches = @"/([^e][^d][^s][^\.]\s|\d+\.?\s|^)([A-Z][a-z]{1,},?((\s[A-Z](\.|,|\.,))(\s?[A-Z](\.|,|\.,))*))(\s?(,|and|&|,\s?and)?\s?([A-Z][a-z]{1,},?((\s[A-Z](\.|,|\.,))(\s?[A-Z](\.|,|\.,))*)))*\s*(\(?\d\d\d\d\)?\.?)?\s*(""|“)?((([A-Za-z:,\r\n]{2,}\s?){3,}))\.?(""|”)?/g";
var matches = Regex.Matches(TestApp.Properties.Resources.Citation, myMatches);
Console.WriteLine(matches.Count);
返回0个匹配项 .
1 回答
你正在逃避错误的引号 . 它永远不会与
\""
一起逃脱 .在常规字符串中,引号用
\"
进行转义 .在@ delimited字符串中,引号用
""
进行转义 .您应该从字符串的开头删除
/
,并从字符串的末尾删除/g
. 它们不是模式的一部分,即正则表达式文字的语法(顺便说一下,它不存在于C#语法中) .