#regex
#регулярное выражение
Вопрос:
У меня есть файл, содержащий много строк следующего
строка 123456 89 2018-02-12 14:47:07 0000 здесь строка 234567 90 2019-02-13 09:02:01 0000 там
Итак, я хотел бы разделить их на последние четыре части из каждой строки
Вот обычное выражение, которое «t d{6} t d{2} t w «
Это выдает
123456 t89 t2018 234567 t90 t2019
Как мне обновить регулярное выражение, чтобы получить
123456t89t2018-02-12 14:47:07 там 234567 t90 t2019-02-13 09:02:01 там
вместо этого?
Спасибо!
Комментарии:
1. Может быть, использовать
str.split
?2. @PedroRodrigues Да — на самом деле, это может быть более эффективным в данном случае. Поскольку этот файл имеет простые единообразные разделители, стоит подумать, действительно ли здесь оправдана сложность регулярного выражения. Однако регулярное выражение может помочь разобрать элементы даты / времени на их компоненты.
3. Да, у меня есть изрядная доля регулярных выражений (черт возьми, у меня есть модуль в pypi, который в основном является регулярным выражением на стероидах), но это не тот случай, когда регулярное выражение приносит пользу. Что касается частей datetime, забудьте regex, модуль datetime как удобную функцию для этого
strptime
.4.
datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%S')
должно сработать.5. И, кстати, что касается эффективности. Если вы не собираетесь использовать файлы в миллион строк, вероятно, лучше пренебречь эффективностью.
Ответ №1:
Конец вашего регулярного выражения "td{6}td{2}tw "
совпадает со следующим символом, не являющимся словом, которым является тире после элемента year. Для захвата оставшихся символов я бы рекомендовал класс отрицательных символов, который соответствует всему, кроме t
. Это:
"td{6}td{2}t[^t] tw "
Обычно это проще, чем указывать все возможные символы, которые могут встречаться.
Комментарии:
1. @user2029709 Рад помочь! Пожалуйста, рассмотрите возможность пометки моего сообщения как принятого ответа. Спасибо!