You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:51:26