我的数据帧中有一个名为"描述"的列。我在该列中有如下文本。
描述
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
您询问的一般情况是"如何解析此输入? 那么任务是你可以利用你的输入的哪些知识来回答你的问题? 所有线条都遵循一种还是几种形式? 您能否对主机名或 IP 地址在每行上的位置进行任何限制?
根据您的输入,这是我可能应用的正则表达式。 又快又脏,不优雅,但如果只是10000行,一次性工作,谁在乎呢? 它是功能性的:
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
之间的区别。 仅匹配字符串开头的匹配项