2013-06-30 21 views
0

我有一个字段名称日期,其值为T,T + 1,T + 2 ,T-2,T-1等。作为每个运营商(+/-)和操作数(n)的我需要进行计算像...使用Python计算T [+/-] n日期的正则表达式,其中n = [1,2,3,4 ...]

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。有人能帮我吗?

+0

想知道如何使用正则表达式在IF条件得到组()值? –

+0

正则表达式不是在Python中执行此操作的方式。 – Elazar

回答

0

虽然“拼写”是不同的,但是相同的校长在Python中适用。

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

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

+0

我知道这一点,我做了这样的事情,但我的担心是“如何使用正则表达式检查在IF条件下”就像.. * if(matched = re.search(r'T \ +(\ d +)',var) ):打印matched.group(1),*而不是将搜索结果(t/f)分配给var,然后在IF下使用var var? –

+0

你想在'if'条件下做一个赋值吗?你不会在Python中这样做。 – Elazar

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)