Python regex从syslog中提取FQDN

2024-05-07 15:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图构建一个正则表达式来解析我们的系统日志。我被要求说明每台使用该服务的服务器。我写了一个简单的正则表达式来提取FQDN,但它似乎消耗了太多的代码。。。在

>>> string = "2010-12-13T00:00:02-05:00 <local3.info> suba1.suba2.example.com named[29959]: client 192.168.11.53#54608: query: subb1.subb2.example.com"
>>> regex = re.compile("\s.*?\.example\.com ")
>>> r = regex.search(string)
>>> r
<_sre.SRE_Match object at 0x896dae0bbf9e6bf0>

# Run findall
>>> regex.findall(string)
[u' <local3.info> suba1.suba2.example.com ', u' client 192.168.11.53#54608: query: subb1.subb2.example.com ']

如您所见,带*的findall太通用了,正则表达式最终消耗了太多。在


Tags: infocomclientstringexamplequeryregex系统日志
3条回答

正则表达式

r"query: ([\w\.]+)"

将从[…]上获取查询的末尾,然后可以使用未命名的组查找来提供域名。在

如果这不是您需要的输出,您能否详细说明所需的输出(作为数据结构)。我猜了一下)。在

python代码可能如下所示:

^{pr2}$

结果将包含

subb1.subb2.example.com

>>> regex = re.compile(r'\b\S*\.example\.com')
>>> regex.findall(string)
[u'suba1.suba2.example.com', u'subb1.subb2.example.com']

尝试使用:

regex = re.compile("\s\S*?\.example\.com ")

相关问题 更多 >