Lookbehind in date regex(python)

时间:2017-12-27 17:33:35

标签: python regex date

我在查找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 个答案:

答案 0 :(得分:1)

这仅适用于您提供的示例字符串(并且年份前面没有2位数后跟空格或连字符)。假设所有日期都使用2位数来定义一个月中的某一天,这对您有用(因为python中的lookbehinds(以及大多数正则表达式引擎)无法量化)。

代码

See regex in use here

\b(?<!\b\d{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断言位置为单词边界
  • (?<!\b\d{2}[ -])负面观察,确保先前的内容不符合以下条件
    • \b断言位置为单词边界
    • \d{2}正好匹配2位数字
    • [ -]匹配空格或连字符-字符
  • \d{4}正好匹配4位数字
  • \b断言位置为单词边界

答案 1 :(得分:0)

string[] split = data.Split(new string[] {","}, stringsplitoptions.None);
if(split[1] == "[UI]")
{
     UI_Data(Res_Data); // method for using the data within the UI
}
//method for the update methods
if(split[1] == "[UP]")
{
    UP_Data(Res_Data);
}