python - 正则表达式:如何在域或 IP 地址之前省略字符串 + 空格?

标签 python regex

以下正则表达式:

(?:X-)?Received: (?:by|from) ([^ \n]+)

对于以下行,将匹配粗体文本:

收到:来自 mail2.oknotify2.com (mail2.oknotify2.com. [208.83.243.70]),来自 mx.google.com,ESMTP id dp5si2596299pdb.170.2015.06.03.14.12.03

收到:10.66.156.198,SMTP id wg6mr62843415pab.126.1433365924352;

收到:来自本地主机(本地主机 [127.0.0.1])

如果我更改文本,使每一行中的“接收方:”和“接收方:来自”都被删除,则留下:

from mail2.oknotify2.com (mail2.oknotify2.com. [208.83.243.70]) by mx.google.com with ESMTP id dp5si2596299pdb.170.2015.06.03.14.12.03

by 10.66.156.198 with SMTP id wg6mr62843415pab.126.1433365924352;

from localhost (localhost [127.0.0.1])

我如何更新正则表达式以仅匹配此文本中的 IP 地址或域(例如 mail.oknotify2.com、10.66.156.198)?

我可以将它缩减为 (?:by|from) ([^\n]+) 这样我就会得到“from mail.oknotify2.com”、“by 10.66.156.198”等。但是我如何进行最后一步并省略“by”和“from”,只留下域/IP 地址?最终的正则表达式也应该像原来的那样,忽略每行中存在的后续域/IP,例如mx.google.com 在第一行。

最佳答案

您可以使用\K 丢弃以前的匹配项:

(?:X-)?Received: (?:by|from) \K([\S]+)

参见 Demo

编辑:

正如@James Newton 所说,但这并不是所有正则表达式风格都支持,您可以引用这篇文章以查看您的引擎是否支持它:

https://stackoverflow.com/a/13543042/3393095

编辑 2:

由于您指定了 Python,只需在您的正则表达式上使用捕获组和 re.findall 即可,如下所示:

>>> import re
>>> text = ("Received: from mail2.oknotify2.com (mail2.oknotify2.com. [208.83.243.70]) by mx.google.com with ESMTP id dp5si2596299pdb.170.2015.06.03.14.12.03\n"
... "Received: by 10.66.156.198 with SMTP id wg6mr62843415pab.126.1433365924352;\n"
... "Received: from localhost (localhost [127.0.0.1])")
>>> re.findall(r'(?:X-)?Received: (?:by|from) ([\S]+)', text)
['mail2.oknotify2.com', '10.66.156.198', 'localhost']

关于python - 正则表达式:如何在域或 IP 地址之前省略字符串 + 空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650898/

相关文章:

regex - .htaccess 重写规则以防止缓存 css、js、图像文件。

java - regexec 未返回所有预期的匹配项

python - 是否可以在 Heroku 上使用非 pip 安装的模块?

python - 合并文件权限

python - 如何导出带有目录和可折叠标题的独立 (HTML) Jupyter 笔记本

python - 使用 tox 在 Windows 上设置多个 python 安装

Python/Tkinter : expanding fontsize dynamically to fill frame

regex - 从一系列输入生成正则表达式

php - 将格式化文本文件解析为 PHP 数组

php - 如何根据 w3c 使用 str_replace 或其他一些 php 函数使 img 标签有效?