#python #python-3.x #regex #string
#python #python-3.x #регулярное выражение #строка
Вопрос:
Я пытаюсь отделить время от AM в строке. Код
content= "11:20pm"
content = re.findall(r"[^Wd_] |d ", content)
print(content)
Я ожидаю ['11:20','pm']
, но с моим кодом я получаю ['11','20','pm']
Что мне делать?
Комментарии:
1. Почему вы этого ожидаете? Какая часть вашего регулярного выражения соответствует
:
?
Ответ №1:
Вы можете сопоставить время, добавив (?::d )?
шаблон к d
альтернативе:
content= "11:20pm"
content = re.findall(r"[^Wd_] |d (?::d )?", content)
print(content) # => ['11:20', 'pm']
Смотрите демонстрацию Python и демонстрацию регулярных выражений.
Обратите внимание, что вы можете захотеть расширить шаблон, чтобы он также соответствовал значениям с плавающей запятой, и если да, вам нужно будет использовать r"[^Wd_] |d (?:[:.]d )?"
.
Подробные сведения:
[^Wd_]
— одна или несколько букв|
— илиd
— одна или несколько цифр(?::d )?
— необязательная последовательность из `:~ и одной или нескольких цифр.
Ответ №2:
Вы можете сопоставить время с dd:dd
или dd?:dd
, если вам нужно иметь дело с однозначными цифрами, а затем сопоставить am / pm с ww
for text. Это делает регулярное выражение более читаемым
content= "11:20pm"
content = re.findall(r"dd?:dd|ww", content)
print(content)