我的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
答案 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()
总是让我兴奋的细节是match
和search
之间的差异。 Match only matches from the beginning of the string