尝试从 IP 地址正则表达式中获取前 3 个字节

Trying to get first 3 bytes out of IP address regex

我正在尝试使用 python 中的 re 模块将字符串与正则表达式匹配。我要获取的是来自 IP 地址的 192.168.1.(因此缺少最后一个字节)。

我已经在正则表达式编辑器中试用了我的正则表达式,它似乎可以工作。变量 original_ip 中已经包含 192.168.1.65,因此我试图从中提取前 3 个字节加上 .

我想做的是从 192.168.1.5 中获取那些 192.168.1. 并将其 return 一个字符串。

代码:

original_ip = subprocess.check_output("""ipconfig getifaddr en0""", shell=True)
    print original_ip
    #extract the xxx.xxx.xxx.number part from it. so the first 3 bytes
    most_of_ip = re.match("\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\b", original_ip).group(0)
    print most_of_ip

错误代码:

    Traceback (most recent call last):
  File "arpdetector.py", line 120, in <module>
    main()
  File "arpdetector.py", line 99, in main
    assign_new_address()
  File "arpdetector.py", line 87, in assign_new_address
    most_of_ip = re.match("\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\b",    original_ip).group(0)
AttributeError: 'NoneType' object has no attribute 'group'

您的代码存在的问题是您没有原始化正则表达式字符串:

most_of_ip = re.match(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\b", original_ip).group(0)
                  #   ^

这使得 \b 充当单词边界,而不是退格的字符表示("\b" 表示退格,如果您尝试将正则表达式 \b 与字符串 \b,你得到 \x08 作为匹配的字符串)。

但使用拆分和合并可以更简单:

most_of_ip = ".".join(original_ip.split(".")[0:3])+"."