Мне нужно регулярное выражение для формата даты в питонапитон регулярное выражение, формат даты
Я хочу «29 марта»
, но не «29 марта» в «29 марта, YYYY», где YYYY не 2012
Спасибо,
Cheng
Мне нужно регулярное выражение для формата даты в питонапитон регулярное выражение, формат даты
Я хочу «29 марта»
, но не «29 марта» в «29 марта, YYYY», где YYYY не 2012
Спасибо,
Cheng
я понял это сам
(\ S * \ S * (1 \ d \ d \ d |?! 200 \ d | 2010 | 2011))
звучит так:
re.compile(r'''^
(january|february|march|...etc.)
\s
\d{1,2}
\s
(,\s2012)?
$''', re.I)
Исходное регулярное выражение, чтобы получить месяц и день: (january|february|...) \d\d?(?!\s*,\s*\d{4})
.
(?!\s*,\s*\d{4})
смотрит в будущее и следит за тем, чтобы строка не сопровождалась , YYYY
. Надеюсь, я понял эту часть вашего вопроса. Он не будет соответствовать march 29, 2012
, потому что после 29-го марта следует запятая.
Похоже, он хочет по желанию «2012», просто нет другого года. –
Вам не нужно использовать регулярное выражение.
import datetime
dt = datetime.datetime.now()
print dt.strftime('%B %d')
Результат будет:
June 18
Кстати, если вы хотите, чтобы отсортировать список дат и показать год только тех, которые в 2012-х, чем пытаться использовать split()
:
line = "March 29, YYYY"
if int(line.split(',')[1]) = 2012
print line
else
pass
Ваш вопрос не на 100% понятен, но похоже, что вы пытаетесь проанализировать дату из входящей строки. Если это так, используйте datetime
module, а не регулярное выражение. Это более вероятно, обрабатывать локали и т.д. Метод datetime.datetime.strptime()
предназначен для чтения даты из строки, поэтому попробовать что-то вроде следующего:
import datetime
def myDate(raw):
# Try to match a date with a year.
try:
dt = datetime.datetime.strptime(raw, '%B %d, %Y')
# Make sure its the year we want.
if dt.year != 2012:
return None
# Error, try to match without a year.
except ValueError:
try:
dt = datetime.datetime.strptime(raw, '%B %d')
except ValueError:
return None
# Add in the year information - by default it says 1900 since
# there was no year details in the string.
dt = dt.replace(year=2012)
# Strip away the time information and return just the date information.
return dt.date()
Метод strptime()
возвращает datetime
объект т.е. информацию на дату и времени. Следовательно, последняя строка вызывает метод date()
, чтобы вернуть только дату. Также обратите внимание, что функция возвращает None
, когда нет действительного ввода - вы можете легко изменить это, чтобы делать то, что вам требуется. См. the documentation of the strptime()
method для получения подробной информации о том, какие коды формата.
Несколько примеров его использования:
>>> myDate('March 29, 2012')
datetime.date(2012, 3, 29)
>>> myDate('March 29, 2011')
>>> myDate('March 29, 2011') is None
True
>>> myDate('March 29')
datetime.date(2012, 3, 29)
>>> myDate('March 39')
>>> myDate('March 39') is None
True
Вы заметите это улавливает и отказывается принимать незаконные даты (например, март 39), который может быть сложно справиться с регулярным выражением.
Возможно, вам захочется прочитать другие ответы, показывающие альтернативы регулярному выражению. Для этого вам не нужно (или не хотеть) использовать регулярное выражение. Это именно то, для чего предназначен модуль даты и времени. – alan