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条)

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度