如何在 Python 中从字符串中提取日期?

2025 年 1 月 4 日 | 阅读 5 分钟

本文将探讨在 Python 中从给定字符串中获取日期的各种技术。在探索各种潜在解决方案之前,将对问题进行彻底解释。

从字符串中提取日期

问题

我们有一个显示日期格式为“YYYY-MM-DD”的字符串。我们的目标是从这个字符串中提取日期。

解决方案

我们可以使用多种方法从字符串中提取日期。其中一些方法如下列出:

  1. 使用 re.search() + strptime() 方法
  2. 使用 python-dateutil() 模块
  3. 使用字符串操作
  4. 使用拆分和连接
  5. 使用正则表达式

现在,让我们在以下各节中通过合适的示例讨论这些方法。

方法 1:使用 re.search() + strptime() 方法

在下面的方法中,我们将首先检查整个字符串,并使用 search() 方法搜索日期。之后,我们将使用 strptime() 来检查搜索到的字符串是否与所需格式匹配。如果是,我们将打印日期。

输出

 
The org str is : I was born on 2003-10-09 in Maplewood
Computed date: 2003-10-09   

说明

该代码示例使用正则表达式查找文本中的日期,并使用该日期创建 datetime 对象。例如,该代码会查找并检索日期,并在语句中打印出来。

方法 2:使用 python-dateutil() 模块

输出

 
The org str is : I was born on 2003-10-09 in Maplewood 
Computed date : 2003-10-09   

说明

这个 Python 脚本演示了如何使用 python-dateutil 模块从字符串中提取日期。它设置了一个包含易于识别的日期格式的测试字符串。在打印原始字符串后,使用 python-dateutil 的 parser.parse() 方法从文本中提取日期。fuzzy=True 参数支持灵活解析。最后,打印提取的日期。

方法 3:使用字符串操作

方法

我们可以使用字符串操作来查找输入字符串中的日期格式字符串。

算法

  • 将输入字符串分割成单个单词。
  • 逐个遍历这些单词,并检查它们是否都符合日期格式字符串。
  • 如果找到匹配项,则返回日期格式字符串。

输出

 
The org str is : I was born on 2003-10-09 in Maplewood
The Extracted Date is :
2003-10-09   

说明

这段 Python 程序使用 split() 方法将输入字符串分割成不同的单词,并遍历每个单词。在循环中,程序会检查该单词的长度是否为十,并且在位置 4 和 7 的字符是否为连字符,然后该单词指示“YYYY-MM-DD”格式的日期。找到其中一种模式后,循环终止,并打印该单词。

  • 时间复杂度: O(n)
  • 辅助空间: O(1)

方法 4:使用拆分和连接

方法

此方法首先将字符串分割成单词列表,然后将日期从最后一个单词中分离出来。最后,它使用“-”拆分日期,然后再次使用“-”连接它。

算法

  • 通过空格字符分割输入字符串,得到两个项目列表:日期字符串“2003-10-09”和文本“I was born on”。
  • 使用索引检索列表中的最后一项,即日期字符串。
  • 当日期字符串被“-”字符分割时,会列出年、月和日。
  • 为了获得最终的日期字符串,使用 join() 函数使用“-”字符将列表项组合起来。

输出

 
The org str is : I was born on 2003-10-09
Computed date: 2003-10-09   

说明

通过使用 .split() 函数将字符串分割成单词,并使用 [-1] 选择最后一个单词;这个 Python 脚本可以从字符串的末尾提取日期。然后它使用 - 将该单词分解成其组成部分,并再次使用 - 将它们连接起来。最后,打印提取的日期。

  • 时间复杂度: O(n),其中 n 是字符串的长度。
  • 空间复杂度: O(n)。

方法 5:使用正则表达式

方法

使用正则表达式,该程序可以从提供的文本中提取日期。

算法

  • 导入 re 模块。
  • 指定输入文本。
  • 将正则表达式模式与 re.findall() 方法结合使用,从文本中提取日期。
  • 打印提取的日期。

输出

 
The org str is : I was born on 2003-10-09 in Maplewood
Computed date: 2003-10-09   

说明

这个 Python 脚本利用 re 模块查找字符串中符合“YYYY-MM-DD”格式的日期。它会选择文本中找到的第一个模式,例如“2003-10-09”。

  • 时间复杂度:程序的执行时间复杂度取决于输入字符串的长度和正则表达式模式的有效性,执行时间为 O(n)。
  • 空间复杂度:由于其将提取的日期保存在变量中的简单方法,程序的空间复杂度为 O(1)。