Каким должно быть выражение регулярных выражений?

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