Python正则如何在文本每个整数前插入<br>标签
Python正则替换实现价格条目分隔插入
<br>标签 问题场景
初始待处理文本:
text = '12\nx\n$79.17\n8\nx\n$118.75\n6\nx\n$158.33\n4\nx\n$237.50'
- 首次尝试直接替换所有换行符为空,得到无分隔连续字符串
12x$79.178x$118.756x$158.334x$237.50,不符合预期 - 后续将换行替换为空格,得到字符串
'12 x $79.17 8 x $118.75 6 x $158.33 4 x $237.50',仍未实现按价格条目分隔的需求
预期输出:
<br> 12x$79.17 <br> 8x$118.75 <br> 6x$158.33 <br> 4x$237.50 <br>
核心需求:匹配文本中作为条目开头的整数,在每个整数前插入<br>标签,合并条目内部的换行分隔内容,实现不同价格条目的分隔。
实现方案
方案1:匹配固定文本结构直接替换(适配当前格式,逻辑更稳定)
原始文本有固定重复结构:[整数]\nx\n$[价格]\n,可以直接用正则匹配每组结构,替换时拼接条目内容并插入<br>标签,不需要单独处理换行:
import re text = '12\nx\n$79.17\n8\nx\n$118.75\n6\nx\n$158.33\n4\nx\n$237.50' result = re.sub(r'(\d+)\nx\n(\$\d+\.\d+)\n?', r' <br> \1\2 ', text) + '<br>' print(result) # 输出: <br> 12x$79.17 <br> 8x$118.75 <br> 6x$158.33 <br> 4x$237.50 <br>
正则说明:
(\d+):捕获每组开头的整数\nx\n:匹配整数和x、x和价格之间的换行符(\$\d+\.\d+):捕获带$符号的价格内容\n?:匹配价格后面的可选换行(最后一组价格后没有换行,加?兼容)- 替换时直接拼接捕获的整数和价格,前面插入
<br>标签,最后在字符串末尾补全<br>即可。
方案2:先清除换行再匹配整数插入标签
如果已经先把所有换行清除得到连续字符串,可以用负向零宽断言排除价格里的数字,只匹配作为条目开头的整数:
import re text = '12\nx\n$79.17\n8\nx\n$118.75\n6\nx\n$158.33\n4\nx\n$237.50' # 先清除所有换行 text_no_linebreak = re.sub(r'\n', '', text) # 匹配前面不是$、不是.的整数(也就是排除价格部分的数字),前面插入<br> result = ' ' + re.sub(r'(?<!\$|\.)(\d+)', r'<br> \1', text_no_linebreak) + ' <br>' print(result) # 输出: <br> 12x$79.17 <br> 8x$118.75 <br> 6x$158.33 <br> 4x$237.50 <br>
正则说明:
(?<!\$|\.)是负向后行断言,限制匹配的数字前面不能是$或者.,这样就不会匹配到$后面的价格整数部分、小数点后面的小数部分,只会匹配每个条目开头的独立整数。
内容的提问来源于stack exchange,提问作者hawaj
相关产品推荐
相关产品推荐

