python - 如果是数字,如何提取最后一行
问题描述
我在下面有一个文本文件,如果行的最后一部分是数字,则尝试提取字符串
4:16:09PM - xx yy DOS activity from 10.0.0.45
9:43:44PM - xx yy 1A disconnected from server
2:40:28AM - xx yy 1A connected
1:21:52AM - xx yy DOS activity from 192.168.123.4
我的代码
with open(r'C:\Users\Desktop\test.log') as f:
for line in f:
dos= re.findall(r'\d',line.split()[-1])
print (list(dos))
我的出局
['1', '0', '0', '0', '4', '5']
[]
[]
['1', '9', '2', '1', '6', '8', '1', '2', '3', '4']
预期的
['10.0.0.45','192.168.123.4']
解决方案
我猜,
(?m)(?:\d+\.){3}\d+$
可能会简单地提取那些所需的 IP。
正则表达式演示
测试
import re
string = '''
4:16:09PM - xx yy DOS activity from 10.0.0.45
9:43:44PM - xx yy 1A disconnected from server
2:40:28AM - xx yy 1A connected
1:21:52AM - xx yy DOS activity from 192.168.123.4
'''
expression = r'(?m)(?:\d+\.){3}\d+$'
print(re.findall(expression, string))
输出
['10.0.0.45', '192.168.123.4']
如果您希望简化/更新/探索表达式,它已在regex101.com的右上角面板中进行了说明。如果您有兴趣,可以在此调试器链接中观看匹配步骤或修改它们。调试器演示了 RegEx 引擎如何逐步使用一些示例输入字符串并执行匹配过程。
正则表达式电路
jex.im可视化正则表达式:
推荐阅读
- scala - 在 scala 中是否有比 util.control.Breaks._ 更简单(要记住)的结构来进行中断?
- java - 在 Java 代码中使用 kotlin 扩展函数
- r - ggplot不能由R运行?
- python - 如何使用 python 修改给定的图网络以实现固定的平均度数?
- android - 无法使用android虚拟设备更改视觉代码工作室中的代码以进行颤振/飞镖
- r - devtools::install_github 错误:无法从 GitHub 安装“未知包”
- css - ionic 5 "CSS Custom Properties" --背景图片覆盖并重复
- php - 如何在 laravel 8 中计算表中的记录
- android - 我用颤振构建的应用程序在安装后立即崩溃
- python - 使用 OpenCV 过滤扫描打印中的图案噪声