Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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提取包头_Python - Fatal编程技术网

用Python提取包头

用Python提取包头,python,Python,我不熟悉Python和stackoverflow,非常新 我想提取目标端口: 2629 > 0 [SYN] Seq=0 Win=512 Len=100 0 > 2629 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0 0 > 2633 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0 我希望使用python正则表达式检索每行的目标端口:“0”、“2629”、“2633”,并忽略其余的端口(出现在“>”之后和“[”之前的数字

我不熟悉Python和stackoverflow,非常新

我想提取目标端口:

2629  >  0 [SYN] Seq=0 Win=512 Len=100
0  >  2629 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
0  >  2633 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
我希望使用python正则表达式检索每行的目标端口:“0”、“2629”、“2633”,并忽略其余的端口(出现在“>”之后和“[”之前的数字)

re.findall("\d\d\d\d\d|\d\d\d\d|\d\d\d|\d\d|\d", str)

但这是一个非常通用的正则表达式。对于这种情况,最好的正则表达式是什么?

对于这种特定情况,您可以使用string上的split函数。 快速实施将是:

dest_ports = []
lines = [
    "2629  >  0 [SYN] Seq=0 Win=512 Len=100", 
    "0  >  2629 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0", 
    "0  >  2633 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0"
]

for line in lines:
  dest_ports.append(line.split('>  ')[1].split(' [')[0])
这将得出答案:

dest_ports = ['0', '2629', 2633']


您可以使用这样的正则表达式:

dff=io.StringIO("""2629  >  0 [SYN] Seq=0 Win=512 Len=100  
0  >  2629 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0  
0  >  2622  [RST, ACK] Seq=1 Ack=1 Win=0 Len=0  
0  >  2633 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0""") 

dff.seek(0) 
for line in dff: 
     print(re.search('(^\d+\s+\>\s+)(\d+)', line).groups()[1]) 

您正在尝试解析某个程序的输出。为什么不直接用Python捕获数据包?例如,如果您有字符串,则使用空格拆分它,并获得第三个元素
line.split(“”)[2]