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

如何用最Pythonic的方式移除日期字符串中的st/nd/rd/th后缀?

最Pythonic的日期序数后缀去除方法

首先得指出你原来代码里的小问题:循环里每次把替换结果赋值给a但没更新原字符串,最后只会保留最后一个后缀的替换效果;列表推导式取[0]也只处理了第一个后缀,其他的都没生效。

要一次性搞定所有st/nd/rd/th后缀,正则表达式是最Pythonic的方案——它能精准匹配数字后面的序数后缀,用一行代码完成所有替换,既简洁又高效。

示例代码

import re

# 你的日期字符串列表
date_strings = [
    'Mar 1st 2017 00:00 am',
    'Mar 2nd 2017 00:00 am',
    'Mar 3rd 2017 00:00 am',
    'Mar 4th 2017 00:00 am'
]

# 核心正则替换逻辑
cleaned_dates = [re.sub(r'(?<=\d)(st|nd|rd|th)', '', date) for date in date_strings]

# 输出结果
for cleaned in cleaned_dates:
    print(cleaned)

代码解释

  • (?<=\d):这是正向零宽断言,确保我们只替换紧跟在数字后面的后缀,避免误替换其他地方出现的st/nd等字符串(比如如果日期文本里有其他单词包含这些字符)。
  • (st|nd|rd|th):匹配四种序数后缀中的任意一种,用|分隔表示“或”的逻辑。
  • re.sub():一次性把所有匹配到的内容替换为空字符串,完成清理。

备选方案(不用正则)

如果你不想引入正则模块,也可以用循环链式替换,但效率略低(需要多次遍历字符串):

suffixes = ['st', 'nd', 'rd', 'th']
cleaned_date = 'Mar 1st 2017 00:00 am'
for suffix in suffixes:
    cleaned_date = cleaned_date.replace(suffix, '')
print(cleaned_date)  # 输出: Mar 1 2017 00:00 am

但对比下来,正则表达式的方案更符合Python“简洁、高效”的风格,是处理这类模式匹配问题的最优解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:04:43