【问题标题】:Grabbing a body of text using regex excluding specific conditions使用正则表达式获取正文,不包括特定条件
【发布时间】:2020-03-03 10:59:15
【问题描述】:

我正在使用 Python 正则表达式来获取已解析电子邮件的正文,该正文可能不包含任何内容或可能看起来像这样:

一些连贯的句子。

lalskjfa;ljkd

其他东西


几行电子邮件签名等等

哈哈哈哈哈哈


我想要电子邮件正文中的所有内容,不包括签名行开启器及其内容。

我基本上撕掉了除签名电子邮件之外的所有内容,以便重新格式化以进行报告。

我试过了:

  • 负前瞻:\G(\A\z|.*\n*(?!_))

  • 正向预测:\G(\A\z|.*\n*(?=_))

似乎两者都没有起作用。

消极的前瞻,它似乎抓住了一切。有了积极的展望,它似乎什么也没抓住。

我希望实现的输出是这个文本:

一些连贯的句子。

lalskjfa;ljkd

其他东西

【问题讨论】:

  • 可能是re.search(r'(?sm)\A(.*?)\n_+$', text).group(1)?如果这个正则表达式“有效”,我不会使用正则表达式。您可以只阅读所有行,直到仅包含下划线的行。
  • 感谢您的回答。由于这个过程的构建方式,我无法访问 python group(1) 而不改变我们程序的很多内容,我不热衷于搞砸。
  • 这都是关于分隔符的。如果是双引号,那么 ".*?" 但与 LF 等的数量一起使用并不好。这是一个非常糟糕的分隔符。
  • 感谢您的有用提示,我得以尝试:(?sm)\A(.*?)\n(?=_),它似乎抓住了我需要的东西。
  • 这里_的作用是什么

标签: python regex python-2.7


【解决方案1】:

你可以使用

(?s)\A.*?(?=\n_)

匹配

  • (?s) - re.DOTALL 内联标志
  • \A - 字符串开头
  • .*? - 任何 0+ 个字符,在第一次出现之前尽可能少
  • (?=\n_) - 后跟 _ 字符的换行符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多