当前位置: 首页 > 知识库问答 >
问题:

元字符python提取日期

张高澹
2023-03-14

python将其分为1-2个数字和Jan或每个月份。所以它只与“2月12日”或“1月12日”匹配,而不与其余部分匹配

那么我如何只对月份进行分组,这样我就可以只对月份使用,而不对表达式的其余部分使用

共有1个答案

连德义
2023-03-14

直接回答您的问题,您可以为“Day Month Year”和“Month Day Year”格式创建两个正则表达式,然后分别检查它们。

import datetime

# Make months using list comp
months_shrt = [datetime.date(1,m,1).strftime('%b') for m in range(1,13)]
months_long = [datetime.date(1,m,1).strftime('%B') for m in range(1,13)]

# Join together
months = months_shrt + months_long
months_or = f'({"|".join(months)})'

expr_dmy = '\d{1,3},? ' + months_or + ',? \d{4}'
expr_mdy = months_or + ',? \d{1,3},? \d{4}'

你可以两个都试一下,看看哪一个匹配。然而,您仍然需要检查它,并将其转换为您最喜欢的日期格式。

相反,我建议完全不要使用regexp,而只尝试不同的日期格式。

str_a = ' ,'
str_b = ' ,'

base_fmts = [('%d', '%b', '%Y'),
             ('%d', '%B', '%Y'),
             ('%b', '%d', '%Y'),
             ('%B', '%d', '%Y')]

def my_formatter(s):
    for o in base_fmts:
        for i in range(2):
            for j in range(2):
                # Concatenate
                fmt = f'{o[0]}{str_a[i]} '
                fmt += f'{o[1]}{str_b[j]} '
                fmt += f'{o[2]}'
    
                try:
                    d = datetime.datetime.strptime(s, fmt)
                except ValueError:
                    continue
                else:
                    return d
>>> d = my_formatter('Jan 15, 2009')
>>> (d.month, d.day, d.year)
(1, 15, 2009)
 类似资料:
  • 问题内容: 有一个名为myDate的文本字段。该字段可以包含1)“结束 某日期 的会计年度”或2)“ dateA 到” dateB ”。 在情况1)中,我想将字段date1 =设置为 someDate 。 在情况2)中,我要设置字段date1 = dateA 和字段date2 = dateB 。 所有日期( someDate , dateA , dateB )都可以写为2000年1月1日,2000

  • 问题内容: 我要提取字符串。我该怎么做? 也许有很多点,例如: 在这种情况下,我基本上想要由和界定的东西。我该如何实现? 另一个问题: 似乎和相同。 问题答案: 尝试匹配 整个 字符串。使用代替。然后,以下模式将满足您的要求: 基本上,我们正在寻找,然后消耗尽可能多的非斜杠字符。那些非斜杠字符将被捕获在组号1中。 实际上,有一种更高级的技术可以执行此操作,但不需要捕获(通常很耗时)。它使用所谓的l

  • 问题内容: 我在python中有一个字符串。我需要将其转换为date对象,然后获取 year 以及 Julian day 的整数值。可能吗? 问题答案: 首先,您可以将其转换为这样的对象: 然后,您可以使用上的方法来获取所需的内容……除了没有直接所需的功能之外,因此您需要转换为时间元组 术语“朱利安日”具有几个不同的含义。如果要查找,则必须间接执行此操作,例如,以下一项。 如果您正在寻找不同的含义

  • 问题内容: 我是新手,我有一个字符串,我想从字符串中提取数字。例如: 输出为 我只想获取一个整数,而不是列表。 问题答案: 您可以使用方法按 数字 字符串,

  • 问题内容: 我将提取字符串中包含的所有数字。哪个更适合pur 例: 结果: 问题答案: 如果只想提取正整数,请尝试以下操作: 我认为这比正则表达式示例更好,原因有三点。首先,你不需要其他模块;其次,它更具可读性,因为你无需解析迷你语言;第三,它更快(因此可能更): 这将无法识别浮点数,负整数或十六进制格式的整数。如果你不能接受这些限制,则可以通过以下亭亭玉立的答案解决问题。

  • 所谓字符串,指的就是字符的序列或者“串”。我们要在字符串上执行的第一个操作是提取所有字符中的一个。C++使用方括号([和])执行该操作: apstring fruit = "banana"; char letter = fruit[1]; cout << letter << endl; 表达式fruit[1]表明我们要从字符串变量fruit中取得编号为1的字符,并将结果保存在字符变量letter