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

如何用re.sub通过正则同时匹配替换字符串中第一个和最后一个空白字符?

解决思路与实现代码

核心思路

不用固定分组,而是通过正则断言精准定位两个目标空白:

  1. 日期后的空白:用正向后顾断言匹配固定格式日期的结尾,只捕获紧随其后的第一个空白
  2. 成本前的空白:用正向前瞻断言匹配字符串结尾的成本数值(支持整数或带小数的格式),只捕获紧邻其前的最后一个空白

正则表达式与代码示例

假设你的日期格式是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:34:39