2013-04-18 188 views
-1

我有以下字符串搜索文本

aaa\bbb\ccc\ddd **16 April**\xyz 

的日期,在這種情況下,4月16日,根據事件的開始時間的變化,該字符串的其餘部分的格式可能會改變成爲或者更短或更長(下面)

aaa\bbb\ccc\ddd\**eee** **16 April**\xyz 

我想總是能夠選擇'16四月」不管可變的其餘部分的長度的其餘部分。日期並不總是'4月16日',而是外部程序給我提供的任何事件的開始日期。

我想我能做到

if April in 'aaa\bbb\ccc\ddd\**eee** **16 April**\xyz': 
    print 'success' 

但我不知道是否有一個更好的辦法...

我需要這樣做,所以我可以重新設置日期16-04 -2013 ..

+1

你可以使用正則表達式來完成這樣的,但簡單的Python字符串的方法(這裏隱含使用)通常速度更快,避免不必要的進口更多\x。 – BlackVegetable

+0

你可以使用正則表達式來獲取日期部分,然後檢查該值是否爲'date'類型。 – eLRuLL

+0

它是某種'\\'-delimeted csv? – J0HN

回答

2

這應該這樣做。

import datetime 
import re 

# Note the \\x to escape \x 
foo = "aaa\bbb\ccc\ddd **16 April**\\xyz" 
bar = "aaa\bbb\ccc\ddd\**eee** **1 December**\\xyz" 

# Could do \d+ and \w+ aswell, it doesn't seem to matter too much in this situation 
pattern = '\*\*(\d{1,2} \w{4,9})\*\*' 

# "16 April" etc 
foo_format = re.search(pattern, foo).group(1) 
bar_format = re.search(pattern, bar).group(1) 

year = str(datetime.datetime.now().year) 

# Datetime object 
foo_date = datetime.datetime.strptime(year + " " + foo_format, "%Y %d %B") 
bar_date = datetime.datetime.strptime(year + " " + bar_format, "%Y %d %B") 

print foo_date.strftime("%Y-%m-%d") 
print bar_date.strftime("%Y-%m-%d") 

讀入Why is '\x' invalid in Python?

0

您可以利用正則表達式

import re 

a = re.search("16 April", "sample string") 
print a.group(0) 

最後一條語句將返回「4月16日」,如果它在字符串中或

+0

不夠靈活。應該處理OP給出的任何格式的日期,而不必明確地搜索日期。 – timss

+0

我剛剛舉了一個例子。第一個參數應該是一個正則表達式。 – gnerkus