Я немного новичок в python, и для этого задания нас попросили использовать одно регулярное выражение для решения каждой подсказки. Я закончил подсказки A-C, но теперь я застрял на подсказке D.
Вот подсказка:
д. Подстановка с использованием регулярного выражения, которая преобразует дату в формате «29 мая 2019 года» или «29 мая 2019 года» в «29 мая 19».
Допустимый формат даты для сопоставления имеет следующие элементы:
• Месяц должен быть обычной трехбуквенной аббревиатурой месяца, начинающейся с заглавной буквы, за которой следуют две строчные буквы: январь, февраль, мар, апрель, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь
• День может состоять из одной или двух цифр. Нет необходимости проверять действительный день, допустимы даты с ведущими нулями, например 03.
• Год ровно из четырех цифр.
• Месяц и день разделены одним или несколькими пробелами. День и год также разделены одним или несколькими пробелами, но необязательная запятая сразу после дня разрешена (пробелы между днем и запятой не допускаются)
На чем я застрял: я не уверен, что поместить в выражение r "..." (см. Код), и теперь у меня появляется ошибка "re.error: bad escape \ w в позиции 0 ", если бы мы могли исправить ошибку или найти другой способ сделать это, поддерживая substr = r" ... ", я был бы очень признателен! Спасибо!
Примечание:
- Мой код re.compile работает просто отлично, прежде чем я перепутал подстроку, чтобы изменить вывод, он принял случай. Он просто не конвертировал, так как я еще не написал строку конвертации.
- В настоящий момент обработка дат не очень обычна, я планирую работать над этим после получения чего-то, что работает.
Код:
import re
d = re.compile(r"^((Jan)\s+[1-31],\s+\d{4})$|"
r"^((Jan)\s+[1-31]\s+\d{4})$|"
r"^((Feb)\s+[1-28],\s+\d{4})$|"
r"^((Feb)\s+[1-28]\s+\d{4})$|"
r"^((Feb)\s+[1-29],\s+\d{4})$|" #ask prof about leap years
r"^((Feb)\s+[1-29]\s+\d{4})$|" #ask prof about leap years
r"^((Mar)\s+[1-31],\s+\d{4})$|"
r"^((Mar)\s+[1-31]\s+\d{4})$|"
r"^((Apr)\s+[1-30],\s+\d{4})$|"
r"^((Apr)\s+[1-30]\s+\d{4})$|"
r"^((May)\s+[1-31],\s+\d{4})$|"
r"^((May)\s+[1-31]\s+\d{4})$|"
r"^((Jun)\s+[1-30],\s+\d{4})$|"
r"^((Jun)\s+[1-30]\s+\d{4})$|"
r"^((Jul)\s+[1-31],\s+\d{4})$|"
r"^((Jul)\s+[1-31]\s+\d{4})$|"
r"^((Aug)\s+[1-31],\s+\d{4})$|"
r"^((Aug)\s+[1-31]\s+\d{4})$|"
r"^((Sep)\s+[1-30],\s+\d{4})$|"
r"^((Sep)\s+[1-30]\s+\d{4})$|"
r"^((Oct)\s+[1-31],\s+\d{4})$|"
r"^((Oct)\s+[1-31]\s+\d{4})$|"
r"^((Nov)\s+[1-30],\s+\d{4})$|"
r"^((Nov)\s+[1-30]\s+\d{4})$|"
r"^((Dec)\s+[1-31],\s+\d{4})$|"
r"^((Dec)\s+[1-31]\s+\d{4})$")
subStr = r"\w\s\d{1,2}\s\d{4}"
print("----Part d tests that match (and should change):")
print(d.sub(subStr, "May 29, 2019"))
print("----Part d tests that match (and should remain unchanged):")
print(d.sub(subStr, "May 29 19"))
Ожидаемый результат:
----Part d tests that match (and should change):
May 29 19
----Part d tests that match (and should remain unchanged):
May 29 19
Фактический вывод (если я оставил подстроку пустой, и как она в настоящее время):
Blank:
----Part d tests that match (and should change):
May 29, 2019
----Part d tests that match (and should remain unchanged):
May 29 19
--------------------------------
Current:
----Part d tests that match (and should change):
this = chr(ESCAPES[this][1])
KeyError: '\\w'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/Xavier/PycharmProjects/hw7/hw7.py", line 101, in <module>
print(d.sub(subStr, "May 29, 2019"))
File "C:\Users\Xavier\AppData\Local\Programs\Python\Python37\lib\re.py", line 309, in _subx
template = _compile_repl(template, pattern)
File "C:\Users\Xavier\AppData\Local\Programs\Python\Python37\lib\re.py", line 300, in _compile_repl
return sre_parse.parse_template(repl, pattern)
File "C:\Users\Xavier\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 1024, in parse_template
raise s.error('bad escape %s' % this, len(this))
re.error: bad escape \w at position 0