-1

我有以下字符串

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

日期(在这种情况下为 4 月 16 日)会根据事件的开始时间而变化,字符串其余部分的格式可能会变短或变长(如下)

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

我希望始终能够选择“4 月 16 日”,而不管其余变量的长度如何。日期并不总是“4 月 16 日”,而是外部程序为我提供的任何事件的开始日期。

我想我能做到

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

但是不知道有没有更好的方法...

我需要这样做,以便我可以将日期重新格式化为 16-04-2013..

4

2 回答 2

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")

在Python\x为什么 '\x' 无效?

于 2013-04-18T17:35:09.620 回答
0

您可以使用正则表达式

import re

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

如果最后一条语句在字符串中,则返回“16 April”或

于 2013-04-18T17:32:53.610 回答