一、正则表达式匹配IP地址
1、search()方法:用于在字符串中搜索正则表达式模式第一次出现的位置
>>> import re >>> re.search(r'chen','I love chenfeng') <re.Match object; span=(7, 11), match='chen'> >>> ''' |-- span(7,11):chen 下标在7到11的位置出现 '''
2、正则表达式中的“.”表示除了换行符中的所有字符 即:通配符
>>> re.search(r'.','I love chenfeng!') <re.Match object; span=(0, 1), match='I'>
>>> re.search(r'chen.','I love chen.feng.com')
<re.Match object; span=(7, 12), match='chen.'
3、匹配点号如何做处理呢,只需要在点号前面加上反斜杠“”,这时候点号不代表任何字符,只代表点号自己
>>> re.search(r'.','I love chen.feng.com!') <re.Match object; span=(11, 12), match='.'>
4、匹配数字:反斜杠+d : " d "
>>> re.search(r'd','I love 123chenfeng.com!') <re.Match object; span=(7, 8), match='1'> >>> re.search(r'ddd','I love 123chenfeng.com!') <re.Match object; span=(7, 10), match='123'> >>>
5、匹配IP地址
>>> re.search(r'ddd.ddd.ddd.ddd','192.168.111.123') <re.Match object; span=(0, 15), match='192.168.111.123'> >>>
这样匹配的问题是:
1、d匹配的数字范围是0~9,而IP的最大范围是255
2、这里要求每一组的IP地址必须是三个数字,如果遇到192.168.1.1这样的IP地址就没办法匹配成功
改进的方法:
1>、用中括号" [] "创建字符类
举例匹配 I love chenfeng.com 字符串中的l >>> re.search(r'[a-z]','I love 123chenfeng.com!') <re.Match object; span=(2, 3), match='l'>
举例匹配“I love 123chenfeng.com ” 字符串中的1 >>> re.search(r'[0-9]','I love 123chenfeng.com!') <re.Match object; span=(7, 8), match='1'> >>>
2>、限定重复匹配的次数 可以用大括号:{}
>>> re.search(r'ab{3}c','abbbc') <re.Match object; span=(0, 5), match='abbbc'> >>> re.search(r'ab{3}c','abbbbbbc') 匹配不了的可以用范围进行匹配 >>> re.search(r'ab{0,9}c','abbbbbbc') <re.Match object; span=(0, 8), match='abbbbbbc'> >>>
3、匹配0~255的数字
>>> re.search(r'[01]dd|2[0-4]d|25[0-5]','188') <re.Match object; span=(0, 3), match='188'> >>> “[01]dd|2[0-4]d” 中的“|”是“或”的含义,或者[01]dd成立,或者2[0-4]d成立,或者25[05]成立,其中任何一个成立都是可以的 [01]dd : 百位数字是0或者1的话,十位和各位可以是任何数字 2[0-4]d :百位是2,十位是0~5,则各位可以是任何数字 25[05] :百位是2,十位是5,则各位只能是0~5的数字
4、匹配IP地址
>>> re.search(r'(([01]{0,1}d{0,1}d|2[0-4]d|25[05]).){3}([01]{0,1}d{0,1}d|2[0-4]d|25[05])','191.168.1.1') <re.Match object; span=(0, 11), match='191.168.1.1'> >>>