我有一个看起来像这样的字符串:
<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>
我非常简单,绝望地迷失了正则表达式!任何人都可以提供任何指针,甚至解决方案吗?
答案 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逻辑应用于您的标记。不理想,但更接近正确的解决方案。