python - 从列表中获取子字符串
问题描述
我正在尝试在电子邮件正文中搜索特定行。我已经能够提取整个电子邮件正文。现在我想从中提取特定的行。到目前为止我的代码:
resp, items = conn.uid("search",None, 'All')
items = items[0].split()
for emailid in items:
resp, data = conn.uid("fetch",emailid, "(RFC822)")
if resp == 'OK':
email_body = data[0][1].decode('utf-8')
mail = email.message_from_string(email_body)
if mail["Subject"].find("PA1") > 0 or mail["Subject"].find("PA2") > 0:
regex = r"(\bEvent demon log entry:)(?:\r?\n|\r)+(\[[^]]+\].*)"
a=re.findall(regex, email_body , re.IGNORECASE)
我现在得到这些行:
[(u'Event demon log entry:', u'[27/12/2018 05:29:30] CAUAJM_I_40245 EVENT: ALARM ALARM: JO=\r')]
[(u'Event demon log entry:', u'[27/12/2018 04:58:05] CAUAJM_I_40245 EVENT: ALARM ALARM: JOBFAILURE JOB: p2=\r')]
[(u'Event demon log entry:', u'[27/12/2018 06:00:03] CAUAJM_I_40245 EVENT: ALARM ALARM: JO=\r')]
[(u'Event demon log entry:', u'[27/12/2018 07:00:05] CAUAJM_I_40245 EVENT: ALARM ALARM: JO=\r')]
但想要得到和之间的[(u'Event demon log entry:', u'[27/12/2018 05:29:30]
一切EVENT: ALARM ALARM: JO=\r')]
期望的输出:
CAUAJM_I_40245 EVENT
来自电子邮件正文的原始代码:
Event demon log entry:
[27/12/2018 04:48:17] CAUAJM_I_40245 EVENT: ALARM ALARM: JOBFAILURE JOB: bx_p2_reporting EXITCODE: 1
更新:
原来我需要得到以下信息:
JOB: bx_p2_reporting EXITCODE: 1
从
Event demon log entry:
[26/12/2018 20:17:14] CAUAJM_I_40245 EVENT: ALARM ALARM: JOBFAILURE JOB: p2=
_batch_excel_RevalFutBasisSpdCalc_NY3pm MACHINE: ldnmdsbatchxl01 EXITCODE: =
268438455
解决方案
您可以使用
r'Event demon log entry:[\r\n]*\[[^]]+]\s*(.*?)\s*EVENT: ALARM'
查看正则表达式演示
如果你使用它re.findall
,你应该只得到CAUAJM_I_40245
.
细节
Event demon log entry:
- 文字子串[\r\n]*
- 0+ CR 或 LF 符号\[
- 一个[
字符[^]]+
- 1 个或多个字符以外的字符]
]
- 一个]
字符\s*
- 0+ 空白字符(.*?)
- Group 1:任何零个或多个字符,除了换行符,尽可能少\s*
- 0+ 空白字符EVENT: ALARM
- 文字子串。
import re
rx = r"Event demon log entry:[\r\n]*\[[^]]+]\s*(.*?)\s*EVENT: ALARM"
s = "Event demon log entry:\n\n[27/12/2018 04:48:17] CAUAJM_I_40245 EVENT: ALARM ALARM: JOBFAILURE JOB: bx_p2_reporting EXITCODE: 1"
print(re.findall(rx, s, re.IGNORECASE))
# => ['CAUAJM_I_40245']
推荐阅读
- java - 以千分尺跟踪登录用户的数量?
- python - 在 Django 中提交表单时重定向到带有参数的视图
- jasper-reports - 如何将文本字段列表与左对齐对齐
- reactjs - 在反应上下文中传递多个状态
- amazon-cloudformation - 有没有办法从 AWS CDK 中的 qldb.CfnLedger 获取生成的 QLDB 分类帐名称?
- javascript - 如何在多个 HTML 元素上调用相同的 JavaScript 函数?
- django - CreateView ModelForm 多条记录一次
- asp.net-web-api2 - 尝试在我的 Web Api 2 中发布图像时不受支持的媒体类型
- python - AttributeError:词汇属性已从 Gensim 4.0.0 中的 KeyedVector 中删除
- vue.js - 使用 Vee-Validate 的问题
和 Vue 多选