python - 如何从一串相连的日期中获取日期

标签 python regex string

这是我正在处理的字符串:'5Nov20217Dec202110Jan2022'

字符串也可以是:

'5Nov2021 7Dec2021 10Jan2022'

我想获得如下列表:

['5Nov2021','7Dec2021','10Jan2022']

我目前正在使用正则表达式,但没有效果:

re.findall('^\d{1,2}[a-zA-Z]{3}\d{4}$','5Nov20217Dec202110Jan2022')

正则表达式解决方案不是必须的。

最佳答案

根据输入的可变性,我建议将 rewhile 循环中的字符串切片结合起来:

def extract_dates(d):
   while d:
      if (k:=re.findall('^\d{1,2}[a-zA-Z]{3}\d{4}', d)):
          if not (l:=d[len(k[0]):]) or l[0].isdigit():
             yield k[0]
             d = l
             continue
      if (k:=re.findall('^\d{1,2}[a-zA-Z]{3}\d{2}', d)):
          yield k[0]
          d = d[len(k[0]):]
      else:
          d = d[1:]
           

dates = ['5Nov20217Dec202110Jan2022', '5Nov217Dec2110Jan22', '5Nov21 7Dec21 10Jan22']
results = [list(extract_dates(i)) for i in dates]

输出:

[['5Nov2021', '7Dec2021', '10Jan2022'], ['5Nov21', '7Dec21', '10Jan22'], ['5Nov21', '7Dec21', '10Jan22']]

关于python - 如何从一串相连的日期中获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68187689/

相关文章:

regex - 删除定界符之间的文本,每行多次

javascript - 如何为我的正则表达式指定非捕获组以允许带有破折号的标签

c# - 正则表达式,匹配以 ) 结尾的字符串并忽略中间的任何 ()

c - 如何在不对变量本身进行任何更改的情况下检查 char 指针变量的第一个字符

regex - 在 RegEx 中将空格转换为制表符

python - 'ForeignRelatedObjectsDescriptor' 对象没有属性 'all'

python - Django Rest Framework 只读模型序列化程序

python - 通过 subprocesses.PIPE 从 ffmpeg 接收多个文件

python - 使用 Python 应用 Excel 公式创建新的数据框列

c++ - 将长字符串分成多个 C++