正则表达式:如何在c#中转义“(”元字符

时间:2010-03-07 18:39:55

标签: c# regex

我正在从span的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 个答案:

答案 0 :(得分:2)

使用两个斜杠。

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

或@ literal字符串运算符

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

请注意;在你原来的正则表达式中,你错过了一个开放式的paren。

答案 1 :(得分:1)

准备好用正则表达式解析HTML ...

话虽这么说,你只需要在你的模式定义前面@(或者你的转义加倍\\)。

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

答案 2 :(得分:1)

我会考虑使用一个字符类,例如[(][)],但使用双反斜杠,例如\\(\\)(一个\用于C#而另一个用于正则表达式)是相当重的语法。所以这是一个品味问题。