2013-06-30 22 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)