Python 截断/修剪日期&;从列表的每一行中列出时间

Python 截断/修剪日期&;从列表的每一行中列出时间,python,regex,trim,truncate,Python,Regex,Trim,Truncate,我有一个列表,它是一个电子邮件正文,每行末尾都有一个日期和时间戳。戳记的格式是一致的,因此可以从右侧计算表达式。以下是样本数据: 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: 04xxxx

我有一个列表,它是一个电子邮件正文,每行末尾都有一个日期和时间戳。戳记的格式是一致的,因此可以从右侧计算表达式。以下是样本数据:

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)
对于OutputList中的此值: 打印此值

我可以使用什么表达式删除附在每行末尾的日期和时间戳?

按行拆分:

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)

使用
readlines
将文件加载到列表中,然后您可以对其进行迭代,截断最后19个字符(
[:-19]
)。这是硬编码的,很难看,但它可以工作。

还不完全清楚您的数据是以什么格式开始的

如果像这样储存的话

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)

删除字符不考虑没有日期的条目,因此强烈建议不要使用截断行而不区分正则表达式的解决方案。您需要一个搜索日期的表达式

尝试以下表达式:

这将匹配日期的开始,并包括行的其余部分

\d{4}-\d{2}-\d{2}.*

要删除数据和时间戳,请在此处使用此REQUEX:

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

您可以使用任何regex测试仪轻松测试样本数据。

请显示您迄今为止的尝试。.请编辑帖子,将您添加的内容包含在评论中。.数据是HTML电子邮件正文,但删除HTML标记后,您将保留样本数据。不是逗号分隔的列表,而是超过6或7行的电子邮件文本,所以在Python中有这样的东西<代码>文本='亲爱的志愿者2018-05-21 19:59:15您的预订已在metrowitnessing.com更新。2018-05-21 19:59:15皇冠街-6月15日10:00am2018-05-21 19:59:15安东尼·詹姆斯(m:04xxxxxxxx)2018-05-21 19:59:15莫妮卡·布朗(m:04xxxxxxxx)2018-05-21 19:59:15鲍勃·史密斯(m:04xxxxxxxxxxxx)2018-05-21 19:59:15状态:已确认2018-05-21 19:59:15’Ok。然后,我所写的内容以列表的形式返回日期(和时间)-这就是你要找的吗?我想删除日期和时间,只保留每行中的其他数据抱歉@vbuzze,我尝试了你的方法,但似乎不起作用。表达式是由两行组成的吗?你首先要把你的身体分成几行,它会给你一个行数组(字符串)。然后,假设当前行存储在变量
line
中,则对每一行执行
line=line[:-19]
。现在您有了一组修剪过的线。如有必要,您可以将它们重新合并为一个字符串。如果此问题已解决,请使用Zapier将其标记为答案。当我运行Python代码时,导致以下错误:回溯(最近一次调用):File“/tmp/tmpMyzEIB/usercode.py”,第10行,在函数输出+=行[:-19]+“\n”名称错误:未定义全局名称“line”谢谢@4ur0r4给您的提示。如何将此表达式合并到删除已发现日期的表达式中?创建一个函数,在正则表达式找到匹配项的每一行中查找索引,然后从该行中删除所有字符,直到该行结束。我会这么做的。谢谢@4ur0r4的提示。我是Python的新手。请问你有没有可能根据你的建议来表达?