Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式从python中的readline()获取一些子字符串_Python_Regex - Fatal编程技术网

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

使用正则表达式从python中的readline()获取一些子字符串,python,regex,Python,Regex,我使用tcpdump嗅探我的网络数据包,我想从存储的文件中获取一些信息。我的文件有两行,但它们重复了很多次 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

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

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模块上的读取:


tanx了解您的答案,但如何让python只为我的奇数或偶数行这样做呢。而且我更喜欢get like(id 55731)和(偏移量0)以及如何为第二行编写正则表达式?@Am1rr3zA:只需将每一行与已编译的正则表达式对象匹配即可。如果行不匹配,则返回none,否则返回一个匹配对象,可以从中提取信息。