【问题标题】:regular expression not matching in c# but matching in regexr正则表达式在 c# 中不匹配但在 regexr 中匹配
【发布时间】:2014-12-10 10:41:31
【问题描述】:

我在这里找到了一个引用解析正则表达式: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# 不兼容的地方吗?

编辑:

链接到带有一些文本引用的正则表达式示例: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 个匹配项。

【问题讨论】:

  • 什么值/文本与您认为的不匹配。
  • 你能发布 regxr 链接吗?
  • 展示如何在 C# 代码中使用正则表达式。很可能是你用错了。

标签: c# regex evaluation


【解决方案1】:

您错误地转义了引号。 \"" 永远无法逃脱。

在常规字符串中,引号用\" 转义。

在@分隔的字符串中,引号用""转义。


您应该删除字符串开头的/ 和字符串末尾的/g。它们不是模式的一部分,即正则表达式文字的语法(顺便说一句,在 C# 语法中不存在)。

【讨论】:

  • @"" 在 C# 中应称为逐字字符串文字(或在其他语言中称为原始字符串文字)。
  • Guffa,谢谢 - 我已经做出了更改,但仍然没有匹配到。
  • @Sash:上面添加了另一个更改。
  • @Guffa - 好多了... TA! :)
猜你喜欢
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多