尝试从 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])+"."
我正在尝试使用 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])+"."