正则表达式匹配替换问题:替换<p class="text_obisnuit">内的<br>并消除多余</p>
正则表达式匹配替换问题:替换
内的
并消除多余
嘿,我懂你的困扰!你现在用的正则能把目标段落里的<br>换成</p>,但原来段落末尾自带的</p>还留在那儿,结果就出现了重复的结束标签,这显然不是你想要的效果。
给你个一步到位的解决方案,直接把<br>和它后面跟着的空白(包括换行)以及多余的</p>一起匹配,替换成单个</p>就搞定了:
针对当前场景的具体正则
- FIND:
(?s)<p class="text_obisnuit">(.*?)<br>\s*</p> - REPLACE BY:
<p class="text_obisnuit">$1</p>
简单解释下这个正则:
(?s):开启单行模式,让.可以匹配换行符,这样就算<br>和</p>之间隔了换行也能精准匹配<p class="text_obisnuit">:精准定位你要处理的段落起始标签(.*?):非贪婪捕获<br>之前的所有内容,存到分组1里,避免过度匹配吞掉不该处理的内容<br>\s*</p>:匹配<br>、任意数量的空白(比如换行、空格)以及段落结束标签- 替换时,把整个匹配内容换成「起始标签 + 分组1的内容 + 单个结束标签」,完美解决重复
</p>的问题
如果要套用你给出的通用公式(BSR = <p class="text_obisnuit">,FR = <br>,ESR = </p>),通用版的正则可以写成:
- FIND:
(?s)({BSR})(.*?)({FR}\s*){ESR} - REPLACE BY:
$1$2{ESR}
这样后续你调整BSR、FR这些变量时,直接替换就能用啦。
备注:内容来源于stack exchange,提问作者Just Me
相关产品推荐
相关产品推荐

