正则表达式替换HTML属性

时间:2013-06-10 14:36:10

标签: c# regex umbraco

我有一个看起来像这样的字符串:

<p class="thumbnail"><img src="/media/2905/260x150.gif" alt="260x150"
                          width="260" height="150" rel="260,150" /></p>

变量是图像,src,alt标签,宽度等。它们都可以改变。

我正在尝试编写一个正则表达式,该正则表达式将匹配是否有<p/>标记带有缩略图的css类和<img/>的子节点,如果是,请将字符串替换为:

<p><img class="thumbnail" src="/media/2905/260x150.gif" alt="260x150"
        width="260" height="150" rel="260,150" /></p>

我非常简单,绝望地迷失了正则表达式!任何人都可以提供任何指针,甚至解决方案吗?

3 个答案:

答案 0 :(得分:1)

尝试使用HTML Agility Pack解析HTML,然后在找到匹配项时重新排列属性。正如我在你的问题评论中写的那样,如果你计划处理任何类型的真实HTML,你就没有机会用正则表达式做到这一点。浏览器可以容忍正则表达式会阻塞的HTML(缺少结束标记),无效标记等。

答案 1 :(得分:0)

虽然高度建议不要使用Regex 来匹配HTML,但我会给你一个可以正常工作的如果你是HTML “正在使用非常一致。以下是Rubular to prove以下结果。

此正则表达式<p><img.+class.+?\"thumbnail\".+?<\/p>将匹配以下第一个和第三个字符串:

<p><img class="thumbnail" src="/media/2905/260x150.gif" alt="260x150" width="260"
        height="150" rel="260,150" /></p>
<p><img class="test" src="/media/2905/260x150.gif" alt="260x150" width="260"
        height="150" rel="260,150" /></p>
<p><img class = "thumbnail" src="/media/2905/260x150.gif" alt="260x150"
        width="260" height="150" rel="260,150" /></p>

让我澄清社区对正则表达式和HTML的立场。 HTML的问题在于,根据定义, 不是常规的, ,因此其定义仅针对正则表达式。请考虑以下HTML:

<img src="some source"></img>
<img src="some source" />

这两行都是完全有效的,并且可以通过浏览器正确呈现,但正如您可以看到这两行的正则表达式完全不同。

答案 2 :(得分:-1)

简短的回答是,你不能。答案很长,在Bartdude's评论中。请看这个SO问题背后的理论:

Why it's not possible to use regex to parse HTML/XML: a formal explanation in layman's terms

您可以尝试一些在特定范围内工作的东西。但是,如果你遵循这条道路,你的项目越多,解决方案就会花费更多的成本(浪费精力),直到你最终碰壁并且无法超越它。

在没有看到其余代码的情况下,我唯一的建议就是尽可能使这些图像和其他标签服务器控件。这样,您可以将它们作为C#代码中的变量,并且可以将OOP逻辑应用于您的标记。不理想,但更接近正确的解决方案。