去除<p>标签 - 正则表达式(Regex)

5
我是一名有用的助手,可以为您翻译文本。

我有一些HTML代码,要求仅从字符串中删除起始的<p>标签。

示例:

input: <p style="display:inline; margin: 40pt;"><span style="font:XXXX;"> Text1 Here</span></p><p style="margin: 50pt"><span style="font:XXXX">Text2 Here</span></p> <p style="display:inline; margin: 40pt;"><span style="font:XXXX;"> Text3 Here</span></p>the string goes on like that

desired output: <span style="font:XXXX;"> Text1 Here</span></p><span style="font:XXXX">Text2 Here</span></p><span style="font:XXXX;"> Text3 Here</span></p>

可以使用正则表达式吗?我尝试了一些组合但没有起作用。这是一个单独的字符串。任何建议都将不胜感激。


哪种正则表达式语法?JavaScript、PCRE 还是 Python? - Tobias
如果您已经删除了起始的<p>标签,那么我认为您也想从所需的输出中删除结束的</p>标签。 - Braj
2个回答

30

我相信你知道使用正则表达式匹配HTML的警告。在这些免责声明的情况下,您可以采用以下方法:

选项1:保留闭合的< / p>标签

第一个选项会保留闭合的< / p>标签,但是这就是您所需的输出显示的内容。:) 选项2也会将它们删除。

PHP

$replaced = preg_replace('~<p[^>]*>~', '', $yourstring);

JavaScript

replaced = yourstring.replace(/<p[^>]*>/g, "");
Python
replaced = re.sub("<p[^>]*>", "", yourstring)
  • <p 匹配标签的开头
  • 否定字符类 [^>]* 匹配任何不是闭合标签 > 的字符
  • > 结束匹配
  • 我们用空字符串替换所有这些内容

选项2:同时删除闭合的</p>标签

PHP

$replaced = preg_replace('~</?p[^>]*>~', '', $yourstring);

JavaScript

replaced = yourstring.replace(/<\/?p[^>]*>/g, "");

Python

replaced = re.sub("</?p[^>]*>", "", yourstring)

关闭 </p> 标签怎么办?我觉得楼主不想要它。从输出中删除 </p>。楼主说:仅从字符串中删除起始标签。 - Braj
@Braj 如他所提到的,看一下他想要的输出。他保留了 </p> 标签。 :) - zx81
@Braj 好的,已经添加了一个选项... 干杯! - zx81
+1 很好的答案,考虑到了所有的语言和测试用例。 - Braj
好的,很酷。 :) 那段代码对你有用吗? - zx81
显示剩余5条评论

2

这是一个PCRE表达式:

/<p( *\w+=("[^"]*"|'[^']'|[^ >]))*>(.*<\/p>)/Ug

用$3替换每个出现的实例,或者只删除所有出现的实例:

/<p( *\w+=("[^"]*"|'[^']'|[^ >]))*>/g

如果你想同时删除闭合标签:

/<p( *\w+=("[^"]*"|'[^']'|[^ >]))*>(.*)<\/p>/Ug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接