python - 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)之后的格式是一样的。乔恩:无论哪种方式都可以。
解决方案
您可以在这里使用积极的前瞻正则表达式:
Test = df['msg'].str.extract(pat='^.*(?=\s+at [A-Za-z]{3} \d{2}, \d{4}, [\d:]+ (?:AM|PM)$)')
这是一个正则表达式演示,显示上述模式有效:
演示
推荐阅读
- node.js - 节点中未定义的 HTTP Post
- javascript - 如何替换 div 子元素?
- python - 为什么 groupby 方法在 Pandas 的滚动总和计算中不起作用,我该如何解决?
- python - 检查日期熊猫的差异并只保留某些ID
- c# - C# .NET Core 3 API 模型验证忽略属性
- git - 为什么合并会覆盖对以下文件的本地更改?
- embedded - 在 STM32L412 上使用 DMA/i2c
- javascript - 如果是 OS / iphone,则风格不同
- javascript - 如何在 if ... else 语句中使用 setTimeOut
- ios - Cordova 插件目标 C,FMDatabase tableExists 参数运行时出错