2013-04-18 151 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