gpt4 book ai didi

python - python中不同格式日期的正则表达式

转载 作者:行者123 更新时间:2023-11-30 22:24:16 27 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式来捕获不同格式的日期。

这些句子是一系列的,该系列的每个样本仅包含一个日期,但可能有其他数字。

日期的格式如下:

04/20/2009; 04/20/09; 4/20/09; 4/3/09
Mar-20-2009; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009;
20 Mar 2009; 20 March 2009; 20 Mar. 2009; 20 March, 2009
Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009
Feb 2009; Sep 2009; Oct 2010
6/2008; 12/2009
2009; 2010

对于只有两位数字的年份,我们假设它是 20 世纪的年份(即 19nn)

这是我的正则表达式:

df_dates = df.str.extract(r'((?:\d{1,2})?[-/\s,]{0,2}(?:\d{1,2})?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|January|February|March|April|May|June|July|August|September|October|November|December)?[-/\s,]{0,2}(?:19|20)?\d{2})')

我的正则表达式产生以下结果:

输入1

Lab: B12 969 2007\n

发现1

12,969

输入2

Contemplating jumping off building - 1973 - difficulty writing paper.\n

发现2

1973

问题

如何更改正则表达式以获得所需的结果?

最佳答案

我坚信您应该尝试使用多个正则表达式来处理数据,而不是尝试使用单个正则表达式完成所有操作。这样,您将拥有一个更加灵活的系统,因为添加新的日期格式比尝试编辑难以阅读的正则表达式以使其更加晦涩要容易得多。

鉴于您在编程语言中使用正则表达式,您可以使用代码生成正则表达式,这样就不会重复字符串。作为一个例子,考虑这个快速、不完整和肮脏的片段:

import re

monthsShort="Jan|Feb"
monthsLong="January|February"
months="(" + monthsShort + "|" + monthsLong + ")"
separators = "[/-]"
days = "\d{2}"
years = "\d{4}"

regex1 = months + separators + days
regex2 = days + separators + months

print(re.search(regex1,"Jan/01"))

最后,我有几个正则表达式可以用来匹配两种日期格式。完成正则表达式很简单,添加更多格式也很容易。整个内容更容易阅读。当然,在连接正则表达式片段时必须小心(因为您可能会忘记括号之类的东西),但我认为这比处理晦涩的正则表达式更容易。

编辑:我忘了提一件事:生成正则表达式后,您可以将它们添加到列表中,这样您就可以迭代它们并将它们应用到单个循环中的文本中。或者,如果您确实想要它,您可以生成包含所有这些内容的单个正则表达式(通过使用括号和竖线)并通过单个语句应用它们。

关于python - python中不同格式日期的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47877816/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com