如何用re.sub通过正则同时匹配替换字符串中第一个和最后一个空白字符?
解决思路与实现代码
核心思路
不用固定分组,而是通过正则断言精准定位两个目标空白:
- 日期后的空白:用正向后顾断言匹配固定格式日期的结尾,只捕获紧随其后的第一个空白
- 成本前的空白:用正向前瞻断言匹配字符串结尾的成本数值(支持整数或带小数的格式),只捕获紧邻其前的最后一个空白
正则表达式与代码示例
假设你的日期格式是DD/MM/YYYY(如20/10/2024),可以用以下代码实现一次性替换:
import re # 示例输入字符串 input_str = "20/10/2024 办公耗材 打印服务 350.50" # 正则表达式:匹配日期后空白 + 成本前空白 pattern = r'(?<=\d{2}/\d{2}/\d{4})\s|\s(?=\d+(\.\d+)?$)' # 替换空白为你需要的内容(这里替换为空) result = re.sub(pattern, '', input_str) print(result) # 输出: "20/10/2024办公耗材 打印服务350.50"
正则各部分解释
(?<=\d{2}/\d{2}/\d{4})\s:(?<=...)是正向后顾断言,确保前面是固定格式的日期(DD/MM/YYYY)\s匹配日期后的第一个空白
\s(?=\d+(\.\d+)?$):(?=...)是正向前瞻断言,确保后面是成本数值(\d+匹配整数部分,(\.\d+)?可选匹配小数部分,$确保到字符串结尾)\s匹配成本前的最后一个空白
适配不同日期格式
如果你的日期格式是YYYY-MM-DD,只需调整后顾断言中的日期正则:
pattern = r'(?<=\d{4}-\d{2}-\d{2})\s|\s(?=\d+(\.\d+)?$)'
内容的提问来源于stack exchange,提问作者SeatofMercy
相关产品推荐
相关产品推荐

