Регулярное выражение для разделения строки, разделенной табуляцией

#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 Рад помочь! Пожалуйста, рассмотрите возможность пометки моего сообщения как принятого ответа. Спасибо!