我有以下字符串
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 ..
答案 0 :(得分: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?
中的\x
答案 1 :(得分:0)
您可以使用正则表达式:
import re
a = re.search("16 April", "sample string")
print a.group(0)
最后一个语句将返回“4月16日”(如果它在字符串中)或无