我在平时很少用到正则表达式,今天遇到一个特殊的需求:从数据库读取数据显示在一个表格中,如果要显示的数据是一段HTML并且包含背景颜色的样式设置,则最终页面显示的内容不能填满表格,就像下面的样子:
客户要求整个单元格的背景都要变成红色,不能有白色的空隙部分。
本来打算通过样式表来控制使其充满整个单元格,但是失败了,因为很难控制要显示内容的高度和单元格一样高。
第二个方案是在绑定数据的时候判断数据是否包含“background-color”的样式,如果有就在单元格上添加相同的样式,于是就需要用正则表达式从读取的数据中提取“background-color: red;”
例如:
从数据库中读取的原始数据是: <p style="background-color: red; width: 10px;">TEST</p>
绑定到表格后应该是: <td style="background-color: red;"><p style="background-color: red; width: 10px;">TEST</p></td>
我设计的表达式是:background-color:\s*(?<color>.*?);
然后通过下面的代码把背景色应用到单元格中:
cell.Text = value.ToString();
// Check customized background color
// and then apply same color to cell
Regex rg = new Regex(@"background-color:\s*(?<color>.*?);", RegexOptions.IgnoreCase);
Match result = rg.Match(cell.Text);
if (result.Success && result.Groups["color"].Success)
{
cell.Attributes.CssStyle.Add(HtmlTextWriterStyle.BackgroundColor, result.Groups["color"].Value);
}
在写这段代码之前我专门找了一些正则表达式的资料恶补一番,其中感觉最好的是deerchao的正则表达式30分钟入门教程
正则表达式实在是太强大了!
0 comments:
发表评论