【正则】python 未被标签包裹的内容添加标签

334 阅读1分钟

刚接触几个星期,代码比较不严谨

# 未标签包裹的内容 添加标签
# </p> sdfksfhsjf </rrr> 文字结尾
# </p> sdfksfhsjf <a> 未包裹
content = '<rrr>' + content + '</rrr>'
re_add_tag = re.compile(r'(</[a-z]*>)([^<]*)(</[a-z])')
content = re_add_tag.sub(r"\1<p>\2</p>\3", content)
re_add_tag = re.compile(r'(</[a-z]*>)([^<]*)(<[a-z])')
content = re_add_tag.sub(r"\1<p>\2</p>\3", content)
content = content.replace('<rrr>', '').replace('</rrr>', '')

第一行如果沒有包裹标签上面的正则不会匹配添加,正则写的是‘</’有关的,其他的情况自己完善


下面是网上的js 可以借鉴下

版权声明:本文为CSDN博主「聪明努力的积极向上」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/weixin_3879…

思路:

首先获取所有被标签包裹的内容

var regex9 = new Regex("<([a-z]*)(?:\\s+?[^>]*?)?>[\\s\\S]*?<\\/\\1>", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);
var ma = regex9.Matches(content);

注意:这里不能用<([a-z])(?:\s+?[^>]?)?>.*?<\/\1>,这样会忽略掉换行符

2.将有标签包裹的替换成特殊字符,最好替换成这样的,切割的时候必将方便

var newStr = regex9.Replace(content, "|##|");

3.切割替换后的newStr

var arr = newStr.Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries);

4.循环拼接字符串

foreach (var s in arr)
 {
     if (s.Equals("##"))
     {
         var str = ma[count].Value; //count 对应的是第一步的ma,匹配到的标签的位置
         newC += str;
         count++;
     }
     else
     {
         newC += "<p>" + s + "</p>";
     }
 }

最后,newC就是将未被包裹的内容都用p标签包了起来

完结撒花~