Обрезать / обрезать дату и время из каждой строки списка - PullRequest
0 голосов
/ 22 мая 2018

У меня есть список, который является телом электронной почты, и каждая строка имеет дату и время в конце.Формат штампа согласован, поэтому выражение можно рассчитать справа.Ниже приведены примеры данных:

Dear Volunteer2018-05-21 19:59:15
Your booking has been updated at metrowitnessing.com .2018-05-21 19:59:15
Crown Street - June 15th, 10:00am2018-05-21 19:59:15
Anthony James (m: 04xxxxxxxx)2018-05-21 19:59:15
Monica Brown (m: 04xxxxxxxx)2018-05-21 19:59:15
Bob Smith (m: 04xxxxxxxx)2018-05-21 19:59:15
Status: Confirmed2018-05-21 19:59:15

Попробовали следующее выражение без результата, которое 'body' является образцом данных, перечисленных выше.

import re
SourceList = input_data['body']
OutputList = filter(
lambda ThisWord: not re.match('^(?:(?:[0-9]{4}[:\/,]){2}[0-9]{2}|am|pm)$', ThisWord),
SourceList)

для ThisValue в OutputList: напечатать ThisValue

Какое выражение можно использовать для удаления метки даты и времени, прикрепленной к концу каждой строки?

Любая помощь приветствуется.

Спасибо, Тим Батлер

Ответы [ 5 ]

0 голосов
/ 22 мая 2018

Для удаления данных и метки времени используйте это требование здесь:

(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})

Вы можете легко протестировать данные своего образца с помощью любого тестера регулярных выражений, например https://regexr.com/.

0 голосов
/ 22 мая 2018

Удаление символов не учитывает записи, у которых нет дат, поэтому НАСТОЯТЕЛЬНО НЕ РЕКОМЕНДУЕТСЯ использовать решения, которые обрезают строки без различения RegEx.Вам нужно выражение, которое ищет даты.

Попробуйте это выражение:

Это будет соответствовать началу даты и включать в себя остаток строки.

\d{4}-\d{2}-\d{2}.*
0 голосов
/ 22 мая 2018

Используйте readlines для загрузки файла в список, а затем вы можете перебирать его, обрезая последние 19 символов ([:-19]).Это жестко и некрасиво, но работает.

0 голосов
/ 22 мая 2018

Не совсем понятно, в каком формате были ваши данные для начала.

Если оно хранится так

text = 'Dear Volunteer2018-05-21 19:59:15 Your booking has been updated at metrowitnessing.com .2018-05-21 19:59:15 Crown Street - June 15th, 10:00am2018-05-21 19:59:15 Anthony James (m: 04xxxxxxxx)2018-05-21 19:59:15 Monica Brown (m: 04xxxxxxxx)2018-05-21 19:59:15 Bob Smith (m: 04xxxxxxxx)2018-05-21 19:59:15 Status: Confirmed2018-05-21 19:59:15'

, тогда вы можете сделать

import re
re.sub(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})', '', text)
0 голосов
/ 22 мая 2018

Разделить на строки:

lines = body.splitlines()

Для каждой строки в строках:

n = 19 #number of characters to trim
line = line[:-n]

Код:

lines = body.splitlines()
output = ""
for line in lines:
   output += line[:-19] + "\n"
#output now contains the trimmed body 
print(output)
...