繁体   English   中英

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

[英]Regular Expression to replace last space in each <p> tag with &nbsp;

我正在寻找帮助来创建正则表达式,以替换特定标签(例如<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")

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

也感谢任何有关如何改善我写这个问题的建议,真是太棒了

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

由于这些原因,建议使用HTML解析器,而不仅仅是使用regex处理HTML文件

仅当您知道所有<p>元素都已关闭并且<p>元素内没有嵌套元素,并且所有<p>元素具有多个单词时,才可以替换

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

\1&nbsp;\2</p>

如果您愿意,可以在最后的\\s*后面加上括号,并在替换字符串中添加\\3 ,如果您希望在结束标记前保留空格。

但是在没有HTML解析器的情况下进行此类操作之前,我会非常小心。

假设您的html格式正确(很少见),并且不知道您使用的是哪种语言,这是一个一般性的答案:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM