dgullou86 2021-02-23 19:08 采纳率: 100%
浏览 23
已采纳

python_regular的問題

請問下面的這個程式,我ip的第一位提取出來都只有一位數,請問哪位大大可以幫忙解答?
import re

str1 = """TCP source  12.168.189.167:32806 destination  1.78.5.128:65247, idle 0:00:00, bytes 74, flags UIO
TCP source  192.168.189.167:80 destination  137.78.5.128:65233, idle 0:00:03, bytes 334516, flags UIO """
print(str1)
list1 = str1.split('\n')
for x in list1:
    result = re.match(
        ".*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5}).*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5}).*bytes\s+("
        "\d+).*flags\s+(\w*)\s*", x).groups()
    print(result)

結果會變成如下
('2.168.189.167', '32806', '1.78.5.128', '65247', '74', 'UIO')
('2.168.189.167', '80', '7.78.5.128', '65233', '334516', 'UIO')

 

  • 写回答

2条回答 默认 最新

  • coagenth 2021-02-23 21:57
    关注

    在你的正则式中“.*”和“(\d”之间需要加\s才能完全匹配。或者用.*?对ip地址前内容用非贪婪模式,匹配出想要的结果。

    1.

    result = re.match(

            ".*\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5}).*\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5}).*bytes\s+(\d+).*flags\s+(\w*)\s*", x).groups()

    2.

    result = re.match(

            ".*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5}).*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5}).*bytes\s+(\d+).*flags\s+(\w*)\s*", x).groups()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取
  • ¥15 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧