首页 > 解决方案 > Pandas:str提取文本除了字符串的最后一部分之外的所有内容

问题描述

我有一个数据框,其中有一列称为“msg”。

在“msg”列中,所有行都如下所示。用户 xxxx 的长度为 6 或 7 个字符。xx.xx.xx.xx 和 yy.yy.yy.yy 是 IP 地址,因此每个八位字节可以是 1 位或 3 位。

User xxxxxx is attempting to restart primary host xxx.xx.xxx.xx (id=1) for managed host yyy.yy.yyy.yy (id=4) at Dec 30, 2019, 6:08:87 PM

我需要一个规则来在“2019 年 12 月 30 日下午 6:08:87”之前提取每个单元格中的所有内容吗?即我想删除“at \w\w\w \d\d​​, \d\d​​\d\d, \d:\d\d:\d\d .....”之后的所有字符

我当前的代码如下,但我不确定如何填写 pat。

Test = df['msg'].str.extract(pat='...')

回复以下评论: 马修:是的。第二个(id=xx)之后的格式是一样的。乔恩:无论哪种方式都可以。

标签: pythonregexpandasdataframeextract

解决方案


您可以在这里使用积极的前瞻正则表达式:

Test = df['msg'].str.extract(pat='^.*(?=\s+at [A-Za-z]{3} \d{2}, \d{4}, [\d:]+ (?:AM|PM)$)')

这是一个正则表达式演示,显示上述模式有效:

演示


推荐阅读