在日期正则表达式(python)中造



我在弄清楚python的外观时遇到了一些麻烦。更具体地说,我的文本具有(mm/dd/yyyy) (mm-dd-yyyy)格式的日期,仅在(yyyy)格式的几年中:

Jan-01-2001
Jan 01 2001
2003 2007
The year was 2009 when x decided to work for Google

仅提取具有yyyy的行的最佳匹配方法。我应该能够提取200320072009,但没有其他日期,例如Jan-01-2001Jan 01 2001。我尝试了 lookbehind 运算符,我能带来的最好的是((?<!(-| ))d{4})。但这仅选择2003不是 20072009。我还尝试使用 groups 来定义日期模式,并与 lookbehind 一起使用它们,但这不起作用。在正则表达式(Python)

中,正确有效的方法是什么

简介

这仅适用于您提出的样品字符串(在不在一年之前没有2位数字的情况下,然后是空间或连字符)。假设所有日期都使用2位数字来定义一个月的一天,则对您有用(因为python中的lookbehinds(以及大多数Regex引擎)无法量化)。


代码

请参阅此处使用的正则

b(?<!bd{2}[ -])d{4}b

结果

输入

Jan-01-2001
Jan 01 2001
2003 2007
The year was 2009 when x decided to work for Google

输出

2003
2007
2009

说明

  • b断言作为单词边界的位置
  • (?<!bd{2}[ -])负外观确保前面的内容与以下内容不匹配
    • b断言作为单词边界的位置
    • d{2}恰好匹配2位数字
    • [ -]匹配空格或连字符d{4}字符
  • b完全匹配4位数字
  • CC_22断言作为单词边界的位置
I hope this may help you:
import re
string = """Jan-01-2001
Jan 01 2001
2003 2007 
The year was 2009 when x decided to work for Google"""
for year in string.split('n'):
    search_date = re.search(r'^(?!w{3}(?:s+|-)d{2}(?:s+|-)d{4}).+',year)
    if search_date:
      print(re.findall(r'd{4}',search_date.group()))

最新更新