我有几个字符串,并且已经确定了它们上日期的某些格式,并且想识别每个字符串上的日期

an_2011_02_12_azar.mp3 ->this is yyyy_mm_dd
20121112_Marcel.mp3    ->this is yyyymmdd
cdani_270607.mp3       ->this is ddmmyy
lica_07_03_15.mp3      ->this is dd_mm_yy

为此,我有:

foo = """
an_2011_02_12_azar.mp3
20121112_Marcel.mp3   
cdani_270607.mp3     
lica_07_03_15.mp3  
"""
try:
    lines = foo.split('\n')
except AttributeError:
    lines = x
for line in lines:
     print(line)
     #deals with 2011_02_12 format
     match = re.search(r'\d{4}_\d{2}_\d{2}', line)
     date = datetime.datetime.strptime(match.group(), '%Y_%m_%d').date()
     print(date)

如何应用几个正则表达式以便可以识别日期?

===============>>#1 票数:1 已采纳

如果删除下划线:

datestr = line.replace('_', '')

那么只有两种日期格式可以处理: yyyymmddddmmyy 此外,每个日期字符串都将包含6到8位数字,您可以使用正则表达式模式r'\\d{8}|\\d{6}'

datestr = re.search(r'\d{8}|\d{6}', datestr).group()

然后可以用以下任一方法解析datestr

date = DT.datetime.strptime(datestr, '%d%m%y')

要么

date = DT.datetime.strptime(datestr, '%Y%m%d')

模式r'\\d{8}|\\d{6}'还将捕获一些可能不类似于日期的字符串,例如表示无效日期的数字。 我们可以使用try..except来捕获ValueErrors来处理这些情况。


import re
import datetime as DT

foo = """\
an_2011_02_12_azar.mp3
20121112_Marcel.mp3   
cdani_270607.mp3     
lica_07_03_15.mp3  
an_2011_13_12_azar.mp3
"""

for line in foo.splitlines():
    datestr = line.replace('_', '')
    datestr = re.search(r'\d{8}|\d{6}', datestr).group()
    try:
        # %y matches 2-digit years
        date = DT.datetime.strptime(datestr, '%d%m%y')
    except ValueError:
        try:
            # %Y matches 4-digit years
            date = DT.datetime.strptime(datestr, '%Y%m%d')
        except ValueError:
            # handle the error case
            date = None
    print('{:23} --> {}'.format(line, date))

产量

an_2011_02_12_azar.mp3  --> 2011-02-12 00:00:00
20121112_Marcel.mp3     --> 2012-11-12 00:00:00
cdani_270607.mp3        --> 2007-06-27 00:00:00
lica_07_03_15.mp3       --> 2015-03-07 00:00:00
an_2011_13_12_azar.mp3  --> None

  ask by cMinor translate from so

未解决问题?本站智能推荐:

2回复

从python中的字符串中提取日期

我有一个字符串 在这里,我想提取以下日期。 但是我的代码必须健壮,因为它可以是2017年1月12日或1月17日的任何格式,并且其位置也可以更改。 对于以上代码,我尝试执行以下操作: 但是在这里,我给出我的约会位置。 我不要。 任何人都可以帮助制作用于提取日期的强大代码。
3回复

正则表达式用于从python中的字符串中提取所有复杂的日期格式

我有以下字符串: 在这里,我想使用regex提取所有提到的日期。 作为尝试,我写了以下regex : 我期望这可以工作,但是它只返回日期的子集。 我不明白为什么它不返回日期: 我创建了regEx通过扩展r'(?:\\d{1,2}[-\\s\\/])?(?:\\d
1回复

使用python从文本中提取具有不同格式的所有日期

如何使用python从文本文件中提取不同格式的所有日期? 作为参考,该文本以法语编写。 例如: [2009年4月30日blablo 06/20/98另外8/2/69发生在此刻1/25/2011也许这9/3/2002其他blablabla Janvier 2005今年1974年]
2回复

在python中从字符串中提取日期时间的最佳方法

我有一个脚本解析出表示日期和时间的电子邮件标题中的字段。 这些字符串的一些示例如下: 在我遇到某些字符串末尾的CEST / EST部分之前,我的工作非常好,只需使用datetime.datetime.strptime如下所示: 我试图将正则表达式放在一起以匹配字符串的日期部分,
2回复

Python:从字符串中提取两个日期

我有一个字符串s ,其中包含两个日期,并且我试图提取这两个日期,以便彼此相减以计算两者之间的天数。 最后,我的目标是得到一个像这样的字符串: s = "o4_24d_20170708_20170801" 在我工作的公司,我们无法安装其他软件包,因此我正在寻找使用本机python的解决方案
7回复

在Python中仅从字符串中提取字符

在Python中,我想只从字符串中提取字符。 考虑我有以下字符串, 我希望结果为, 考虑到只有字母表,我试图分开, 但这种分裂并没有发生。
3回复

在python中提取子字符串

我想解析一个字符串来提取花括号中的所有子串: 应该产生: 然后我想格式化字符串以使用值打印初始字符串: 我怎样才能做到这一点?
4回复

从python中的字符串中提取字母数字子字符串

我在python中有一个字符串 我想提取'b'。 我可以删除字符串的第一个和最后一个字母,但我不这样做的原因是因为文本字符串可能包含'(a)',(iii),'i)','(1'或'(2) '。有时它们根本没有括号。但它们总是包含一个字母数字值。但我同样想要检索那里的字母数字值。 这
2回复

使用Python从具有特定格式的字符串中提取数据

我是Python新手,目前正在尝试使用它来解析一些自定义输出格式的字符串。 实际上,格式包含float的命名列表和float元组列表。 我写了一个函数,但看起来过多。 如何以更适合Python的方式完成?
5回复

Python:从格式化的字符串中提取字段

我有一个格式为键/值对的字符串列表,用空格分隔。 例如,一条消息可能是: 键/值对将始终按照该顺序,并且消息将始终采用这种形式。 我想将此字符串转换为以下形式的字典: 需要注意的几件事: 我希望level和sequenceNum为数字,而不是字符串 时间戳,