正则表达式使用python计算T [+/-] n日期,其中n = [1,2,3,4 ...]

时间:2013-06-30 10:50:58

标签: python-2.7

我有一个字段名称Date,其值如T,T + 1,T + 2,T-2,T-1等。根据运算符(+/-)和operand2(n),我需要像...

if 
  T then date.today()
  T+n then date.today()+ timedelta(days=n)
  T-n then date.today()- timedelta(days=n)

在Perl我用来做......

if (var =~ /T/) { today();}
if (var =~ /T\+(\d+)/) { today()+$1;}
if (var =~ /T\-(\d+)/) { today()-$1;}

我想以相同的方式使用Python使用正则表达式。任何人都可以帮助我。

3 个答案:

答案 0 :(得分:1)

>>> import datetime
>>> import re
>>>
>>> def t(var):
...     today = datetime.date.today()
...     if var == 'T':
...         return today
...     matched = re.search(r'T\+(\d+)', var)
...     if matched:
...         return today + datetime.timedelta(int(matched.group(1)))
...     matched = re.search(r'T-(\d+)', var)
...     if matched:
...         return today - datetime.timedelta(int(matched.group(1)))
...
>>> t('T')
datetime.date(2013, 6, 30)
>>> t('T+1')
datetime.date(2013, 7, 1)
>>> t('T-1')
datetime.date(2013, 6, 29)

http://docs.python.org/2/library/re.html

http://docs.python.org/2/library/datetime.html

答案 1 :(得分:0)

相同的原则适用于Python,尽管“拼写”不同。

在Python中,正则表达式使用re module完成。使用datetime module完成日期处理。

答案 2 :(得分:0)

from datetime import date, timedelta
day = date.today()
if len(var)==3:
    delta = timedelta(int(var[2:]))
    if var[1]=='+':
        day += delta
    elif var[1]=='-':
        day -= delta

您可以将operator模块用于上一个if

from operator import add, sub
day = {'+': add, '-': sub}[var[1]](day, delta)