python - 使用正则表达式从 python 中的 readline() 获取一些子字符串

标签 python regex

我使用 tcpdump 来嗅探我的网络数据包,我想从存储的文件中获取一些信息。我的文件有 2 行分隔的行,但它们重复了很多次。

23:30:43.170344 IP (tos 0x0, ttl 64, id 55731, offset 0, flags [DF], proto TCP (6), length 443)

192.168.98.138.49341 > 201.20.49.239.80: Flags [P.], seq 562034569:562034972, ack 364925832, win 5840, length 403

我想获取时间戳(23:30:43.170344)和id(id 55731)和偏移量(23:30:43.170344) )从第一行(我的文件中的所有行都像这样)。并存储在不同的列表中。

并获取2个独立的ip(192.168.98.138.49341和201.20.49.239.80)和seq(seq 562034569:562034972)和ack(ack 364925832)从第二行(我的文件中的所有行都像这样)并存储在不同的列表中。

如果我能用正则表达式来做到这一点那就最好了。

最佳答案

对于第一部分,获取时间戳、id 和偏移量。

我确信这是一个粗略的正则表达式。

>>> import re
>>> l = '23:30:43.170344 IP (tos 0x0, ttl 64, id 55731, offset 0, flags [DF], proto TCP (6), length 443)'
>>> k = re.compile(r'^([0-9:]+\.[0-9]+) IP \(.* id ([0-9]+), offset ([0-9]+).*\)')
>>> x = k.match(l)
>>> x.groups()
('23:30:43.170344', '55731', '0')
>>> x.groups()[0]
'23:30:43.170344'
>>> x.groups()[1]
'55731'
>>> x.groups()[2]
'0'
>>> 

第二部分:

>>> l = '192.168.98.138.49341 > 201.20.49.239.80: Flags [P.], seq 562034569:562034972, ack 364925832, win 5840, length 403'
>>> k = re.compile(r'^([0-9.]+) > ([0-9.]+): .* seq ([0-9:]+), ack ([0-9]+).*')
>>> x = k.match(l)
>>> for y in x.groups(): print y
... 
192.168.98.138.49341
201.20.49.239.80
562034569:562034972
364925832

有关 re 模块的阅读:

关于python - 使用正则表达式从 python 中的 readline() 获取一些子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4085121/

相关文章:

php - regex- preg_replace - 换行后的空格!

javascript - 删除标点符号,保留空格,toLowerCase,简洁地添加破折号

python - 带 FTP 的虚拟文件系统

python - 使用 VectorAssembler 计算平均值和最大值

python - 在每次迭代时保存 pickle 对象,而无需每次都写入整个对象

java - 获取逗号分隔字符串中的第一个数字

jQuery UI Autocomplete v1.8.14 多词搜索+突出显示

python - 如何为 PyQt 选择图形工具包

python - 调用静态方法的惯用方式

regex - 将不同文件中的值合并到一个 CSV 文件中