正则表达式用</p>替换每个<p>标签中的最后一个空格

时间:2012-10-12 02:26:10

标签: html regex

我正在寻找帮助来创建一个正则表达式,以将特定标记中的所有最后空格(例如。<p>)替换为&nbsp;。快速修复所有寡妇的大量html文档。

例如;

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus suscipit
    dolor a felis blandit sodales. Donec lectus justo, convallis vitae euismod sit.
    Nullam et tristique&nbsp;dui.</p> 
    <p>Nullam accumsan pellentesque pretium. Morbi tempor egestas lectus, 
    a eleifend enim aliquet varius. Vivamus vitae semper&nbsp;tortor.</p>

我在http://www.petefreitag.com/item/580.cfm

找到了这个例子
ReReplace(text, " ([^ ]+\r?\n)", "&nbsp;\1", "ALL")

但是它将它添加到每个元素的每个最后空间。

还要感谢任何有关如何改进我写这个问题的建议都很棒

2 个答案:

答案 0 :(得分:1)

这个问题比它看起来要困难一些,因为在结束标记<p>之前,你可能只有</p>个没有单词的元素,只有一个单词,多个单词或大量的空格。您甚至可以在段落元素中使用嵌套元素,使您认为可能是孤儿词不是孤儿。为了使事情变得更加复杂,在许多版本的HTML中,结束标记</p>实际上是可选的。

出于这些原因,建议use an HTML parser, and not just process your HTML file with a regex

只有当您知道所有<p>元素都已关闭且<p>元素中没有嵌套元素且所有<p>元素都有多个单词时,您才能获得远离替换

(\S)\s+(\S+)\s*</p>

\1&nbsp;\2</p>

如果您希望在结束标记之前保留间距(如果您愿意),则可以对最后一个\s*加上括号并在替换字符串中添加\3

在没有HTML解析器的情况下做这样的事情之前我会小心。

答案 1 :(得分:0)

假设您的HTML形式良好(很少见),并且不知道您使用的语言,这里是一般答案:

Regex: " (?= *</p>)"
Replacement text: "&nbsp;"

正则表达式匹配一个空格但使用了前瞻声明匹配的空格后跟任意数量的(0-n)空格,然后是目标标记。