【问题描述】nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
提取用户输入的字符串中的IP地址和端口号,IP地址和端口号由冒号隔开,要求将IP地址和端口号分开打印输出在控制台上。nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
输入数据:nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
服务器1的IP地址是:192.168.3.112:8080,服务器2的IP地址是:192.168.3.122:80nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
输出结果:nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
匹配结果:[('192.168.3.112','8080'),('192.168.3.122','80')]nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
IP地址表:['192.168.3.112','192.168.3.122']nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
端口号表:['8080','80']nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【题前思考】nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
根据问题描述,填写表10-2-1。nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
表10-2-1 问题分析nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【解题思路】nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
为了将IP地址和端口号分开,需要在正则表达式中定义两个分组,分别对IP地址和端口号样式加( )。此外,调用re.findall( )方法匹配样式,结果为元组的列表,还需要编程从结果中取出IP地址和端口号。nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【程序代码】nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【代码分析】nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
①:pattern保存的样式联合提取IP地址和端口号。(\d{1,3}(?:\.\d{1,3}){3})匹配IP地址。“:”匹配冒号。因为端口号的范围是1~65535,所以用(\d{1,5})匹配端口号。注意,( )构成捕获组,(?:)为非捕获组,本次主要讨论捕获组。nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
②:采用re.findall( )方法从左到右扫描字符串,返回一个不重复的pattern的匹配列表。如果有多个分组,就把每个分组看成一项,组合为一个元组,然后返回一个元组的列表。nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
③:返回一个元组的列表,注意结果中没有冒号。匹配过程如图10-2-1所示。nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
④:取出rs中的IP地址组成地址表ips。nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
⑤:取出rs中的端口号组成端口号表ports。nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
图10-2-1 捕获组匹配样式nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【技术全貌】nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
Python正则表达式组分为捕获组和非捕获组。( )是捕获组,将括号内的规则视为一个整体,有一个回溯引用,将所有匹配的分组保存在内存中,引用分组的时候引用匹配出的文本。非捕获组(?:)仅匹配文本,不会捕获文本保存到内存中。nXM100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库