刚接触几个星期,代码比较不严谨
# 未标签包裹的内容 添加标签
# </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标签包了起来
完结撒花~