python - 从列表中获取子字符串

标签 python regex list

我正在尝试在电子邮件正文中搜索特定行。我已经能够提取整个电子邮件正文。现在我想从中提取特定的行。到目前为止我的代码:

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 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'

请参阅regex demo

如果您将其与 re.findall 一起使用,您应该只会获得 CAUAJM_I_40245

详细信息

  • 事件恶魔日志条目: - 文字子字符串
  • [\r\n]* - 0+ CR 或 LF 符号
  • \[ - 一个 [ 字符
  • [^]]+ - 除 ] 之外的 1 个或多个字符
  • ] - ] 字符
  • \s* - 0+ 空白字符
  • (.*?) - 第 1 组:任何零个或多个字符(换行符除外),尽可能少
  • \s* - 0+ 空白字符
  • EVENT: ALARM - 文字子字符串。

Python demo :

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']

关于python - 从列表中获取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53944028/

相关文章:

python - TensorFlow 2 中的 tf.contrib.layers.complete_connected() ?

javascript - JS regex - 如何将空格添加到我使用 RegExp 找到的符号

arrays - 访问矩阵中的值(Haskell 新手)

python - 从 CSV 文件创建矩阵

Python-导入模块导入模块

python - ValueError(u"无效模式,应为 'c' 或 'fortran' ,得到 f\x00o\x00r\x00t",)

java - 如何在链表中的另一个元素之前插入 和 元素

python - 是否可以使用 argparse 将正则表达式字符串作为参数传递给 Python CLI 工具?

javascript - 排除 .module.less 的 .less 扩展文件的正则表达式

python - 使用相同元素展开列表