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

如何用Python 3.10格式化含多余空格的日期字符串?

解决方法

首先你原来的正则没法精准捕获日期的各组成部分,得换成分组式的正则来匹配混乱结构,再通过替换函数清理空格。

步骤1:编写匹配混乱日期的正则

我们需要匹配的日期结构是:数字(含空格) + .(前后可能有空格) + 月份字母(含空格) + 年份数字(含空格),对应的正则如下:

pattern = r'(\d(?:\s+\d)*)\s*\.\s*([A-Z](?:\s+[A-Z])*)\s*(\d(?:\s+\d){3})'

各分组说明:

  • 第一个分组(\d(?:\s+\d)*):匹配日的数字(比如"1"、"1 8"这类带空格的数字)
  • \s*\.\s*:匹配点号以及前后的任意空格
  • 第二个分组([A-Z](?:\s+[A-Z])*):匹配月份的字母(比如"J U L Y"、"D E C E M B E R")
  • 第三个分组(\d(?:\s+\d){3}):匹配四位年份的数字(比如"1 9 5 0"、"2 0 1 8")

步骤2:写替换函数清理空格

定义一个函数,接收正则匹配对象,对每个分组去掉空格后重新拼接成正确格式:

def fix_date_match(match):
    # 清理日的空格,加上点号
    day = match.group(1).replace(" ", "") + "."
    # 清理月份的空格
    month = match.group(2).replace(" ", "")
    # 清理年份的空格
    year = match.group(3).replace(" ", "")
    # 拼接成目标格式:"日. 月份 年份"
    return f"{day} {month} {year}"

步骤3:批量处理字符串

用re.sub批量替换每个字符串里的混乱日期,完整示例代码:

import re

# 正则模式和替换函数
pattern = r'(\d(?:\s+\d)*)\s*\.\s*([A-Z](?:\s+[A-Z])*)\s*(\d(?:\s+\d){3})'

def fix_date_match(match):
    day = match.group(1).replace(" ", "") + "."
    month = match.group(2).replace(" ", "")
    year = match.group(3).replace(" ", "")
    return f"{day} {month} {year}"

# 测试示例字符串
test_strings = [
    "\"1 . J U L Y 1 9 5 0\"",
    "\"1 8 . A P R I L 1 9 8 0\"",
    "\"Hello world, today is: 2 4 . J A N U A R Y 2 0 0 0\"",
    "\"D E C I S I O N: 1 3 . D E C E M B E R 2 0 1 8 / P U B L I S H E D: 1 4 . D E C E M B E R 2 0 1 8\" (edit)"
]

for s in test_strings:
    fixed_str = re.sub(pattern, fix_date_match, s)
    print(fixed_str)

运行后输出就是你需要的正确格式:

  • "1. JULY 1950"
  • "18. APRIL 1980"
  • "Hello world, today is: 24. JANUARY 2000"
  • "D E C I S I O N: 13. DECEMBER 2018 / P U B L I S H E D: 14. DECEMBER 2018" (edit)

关于你原来的正则

你原来的^\s*\d+\s+[\S\s]*\s+\d{1}\s*\d{1}\s*\d{1}\s*\d{1}\s*$是匹配整个字符串的,而且无法提取日期的日、月、年细分部分,没法针对性清理空格,所以换成分组捕获的正则更适配需求。

内容的提问来源于stack exchange,提问作者quadratecode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:31:00