使用Python从Description中提取Server Name \ Ip

时间:2017-10-11 06:51:45

标签: python python-2.7

我的Dataframe中有一个名为Description的列。我在该栏目中有文字如下。

描述

Summary: SD1: Low free LOG space in database saptempdb: 2.99% Date: 01/01/2017 Severity: Major Reso
Summary: SD1: Low free DATA space in database 10:101:101:1 2.99% Date: 01/01/2017 Severity: Major Res
Summary: SAP SolMan Sys=SM1_SNG01AMMSOL04,MO=AGEEPM40,Alert=Columnstore Unloads,Desc= ,Cat=Exception

如何从以上描述中提取服务器名称或IP。我有大约10000行。

我写了如下,将逗号分隔为逗号。现在我需要过滤服务器名称或ips

    df['sentsplit'] = df["Description"].str.split(" ")
    print df

1 个答案:

答案 0 :(得分:0)

您要问的一般情况是“如何解析此输入?”。那么任务是你可以利用什么知识来回答你的问题?所有的行都遵循一种或几种形式吗?您是否可以对每行上的主机名或IP地址进行限制?

鉴于您的意见,这里是我可能适用的正则表达式。快速而肮脏 - 不优雅 - 但如果只有10,000行,一次性工作,谁在乎呢?它的功能:

database (\d+:\d+:\d+:\d+)|database (\w+)|Sys=([^, ]+),

此正则表达式假设IP地址始终位于单词database之后,前面有空格,或者主机名将位于单词database, OR that the hostname will be preceded by Sys = and followed by a之后,或空间。

显然,请根据您的目的进行测试,并根据需要进行微调。在Python API中:

host_or_ip_re = re.compile(r'database (\d+:\d+:\d+:\d+)|database (\w+)|Sys=([^, ]+),')
for line in log:
    m = host_or_ip_re.searc( line )
    if m:
        print m.groups()

总是让我兴奋的细节是matchsearch之间的差异。 Match only matches from the beginning of the string