代码之家  ›  专栏  ›  技术社区  ›  Samuel Goldenbaum

正则表达式:如何转义“”(C中的meta char#

  •  2
  • Samuel Goldenbaum  · 技术社区  · 16 年前

    我从跨度的innerhtml中提取一个年份值,该值位于括号中,如下所示:

    <span class="year_type">(2009)</span><br>
    

    我想得到不带括号的年份值,但在尝试转义“”(char)时会遇到一些编译器错误。

    我的模式:

    const string yearPattern = "<span class=\"year_type\">\((?<year>.*?)\)</span>";
    

    完整代码:

    const string yearPattern = "<span class=\"year_type\">\((?<year>.*?)\)</span>";
    var regex = new Regex(yearPattern, RegexOptions.Singleline | RegexOptions.IgnoreCase);
    Match match = regex.Match(data);
    return match.Groups["year"].Value;
    

    什么是逃离()的最佳方法?

    谢谢

    3 回复  |  直到 16 年前
        1
  •  2
  •   Cheeso    16 年前

    使用两个斜杠。

    const string yearPattern = "<span class=\"year_type\">\\((?<year>.*?)\\)</span>"; 
    

    或@literal string运算符

    const string yearPattern = @"<span class=""year_type"">\(?<year>.*?)\)</span>"; 
    

    注意:在原来的regex中,缺少一个开放的paren。

        2
  •  1
  •   Austin Salonen gmlacrosse    16 年前

    准备用regex分析HTML…

    也就是说,你只需要 @ 在你的模式定义前面(或者加倍你的逃逸 \\ )

    const string yearPattern = @"<span class=""year_type"">\(?<year>.*?)\)</span>";
    
        3
  •  1
  •   Romain    16 年前

    我会考虑为此使用一个字符类,例如 [(] [)] ,但使用双反斜杠,例如 \\( \\) (一) \ 表示c,另一个表示regex)的语法相当重。所以这是一个品味问题。