码迷,mamicode.com
首页 > 其他好文 > 详细

学习笔记-正则表达式

时间:2017-08-23 21:36:28      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:正则

search

# search() 方法用于在字符串中搜索正则表达式第一次出现的位置。
>>> import re
>>> re.search(r‘FishC‘,‘I love FishC.com!‘)
<_sre.SRE_Match object; span=(7, 12), match=‘FishC‘>
# . 用于表示除了换行的任何一个字符(此列返回了第一个字符I)
>>> re.search(r‘.‘, ‘I love FishC.com!‘)
<_sre.SRE_Match object; span=(0, 1), match=‘I‘>
# 要匹配.本身,则加一个元字符\
>>> re.search(r‘\.‘, ‘I love FishC.com!‘)
<_sre.SRE_Match object; span=(12, 13), match=‘.‘>

数字匹配


# \d 用于匹配任意一个数字,等效于 [0-9]
# 匹配1个数字
>>> re.search(r‘\d‘, ‘I love 123 FishC.com‘)
<_sre.SRE_Match object; span=(7, 8), match=‘1‘>
# 匹配3个数字
>>> re.search(r‘\d\d\d‘, ‘I love 123 FishC.com‘)
<_sre.SRE_Match object; span=(7, 10), match=‘123‘>
# 匹配2个数字
>>> re.search(r‘\d{2}‘, ‘I love 123 FishC.com‘)
<_sre.SRE_Match object; span=(7, 9), match=‘12‘>

范围匹配


# 使用[]来匹配一定范围
# 默认对大小写敏感
# [aeiou]用于匹配 aeiou中任意一个字符
>>> re.search(r‘[aeiou]‘, ‘I love FishC.com!‘)
<_sre.SRE_Match object; span=(3, 4), match=‘o‘>
# [a-g] 用于匹配 a至g之时的任意一个字符.[0-5]用于匹配0-5之间的任意一个数字
>>> re.search(r‘[a-g]‘, ‘I love FishC.com!‘)
<_sre.SRE_Match object; span=(5, 6), match=‘e‘>

次数匹配


# 使用{}匹配次数
>>> a = ‘abbbccc1234‘
# 匹配b三次
>>> re.search(r‘ab{3}‘, a)
<_sre.SRE_Match object; span=(0, 4), match=‘abbb‘>
# 匹配b4次(无结果没返回值)
>>> re.search(r‘ab{4}‘, a)
# 匹配2-4次
>>> re.search(r‘ab{2,4}‘, a)
<_sre.SRE_Match object; span=(0, 4), match=‘abbb‘>
# 最少匹配2次
>>> re.search(r‘ab{2,}‘, a)
<_sre.SRE_Match object; span=(0, 4), match=‘abbb‘>
# 最多匹配4次
>>> re.search(r‘ab{,4}‘, a)
<_sre.SRE_Match object; span=(0, 4), match=‘abbb‘>
>>>

小练习

匹配255之间的数

# 思考:re.search(r‘[0-255]‘,‘188‘)会匹配出什么?
>>> re.search(r‘[0-255]‘,‘188‘)
<_sre.SRE_Match object; span=(0, 1), match=‘1‘>
# 解析:[0-255]表示匹配0-2与5与5,则匹配0,1,2,5中任意一个字符

# 思考: re.search(‘[0-2][0-5][0-5]‘,‘188‘)会匹配出什么?
>>> re.search(‘[0-2][0-5][0-5]‘,‘188‘)
# 解析:[0-2][0-5][0-5] 表示一个 第一位是0-2,第二位是0-5第三位是0-5的一个三位数

# 表达式:[01]\d\d|2[0-4]\d|25[0-5]
>>> re.search(r‘[01]\d\d|2[0-4]\d|25[0-5]‘ , ‘188‘)
<_sre.SRE_Match object; span=(0, 3), match=‘188‘>
# 存在问题:无法匹配18,5等低于3位数,仅能匹配018,005

# 正确的表达式: [01]{,1}\d{,1}\d|2[0-4]\d|25[0-5]

IP地址匹配


# 方法1:
# 表达式 \d\d\d\.\d\d\d\.\d\d\d\.\d\d\d
# 存在问题:仅能匹配三位数的IP,且不能匹配出正确范围
# 例:正确匹配
>>> re.search(‘\d\d\d\.\d\d\d\.\d\d\d\.\d\d\d‘, ‘sdf192.168.123.123sdafkj‘)
<_sre.SRE_Match object; span=(3, 18), match=‘192.168.123.123‘>
# 例:错误匹配
# 范围超出
>>> re.search(‘\d\d\d\.\d\d\d\.\d\d\d\.\d\d\d‘, ‘sdf555.666.777.888sdafkj‘)
<_sre.SRE_Match object; span=(3, 18), match=‘555.666.777.888‘>
# 无匹配项
>>> re.search(‘\d\d\d\.\d\d\d\.\d\d\d\.\d\d\d‘, ‘sdf192.168.12.123sdafkj‘)

# 方法2:
# 表达式 (([01]\d\d|2[0-4]\d|25[0-5])\.){3}[01]\d\d|2[0-4]\d|25[0-5]
# 存在问题:能正确匹配范围,但仅能匹配出每字段为3位的IP地址。例可以匹配192.168.200.100但不能匹配192.168.1.1
>>> re.search(r‘(([01]\d\d|2[0-4]\d|25[0-5])\.){3}[01]\d\d|2[0-4]\d|25[0-5]‘, ‘192.168.200.100‘)
<_sre.SRE_Match object; span=(0, 15), match=‘192.168.200.100‘>

# 方法3
# 表达式: (([01]{,1}\d{,1}\d|2[0-4]\d|25[0-5])\.){3}[01]{,1}\d{,1}\d|2[0-4]\d|25[0-5]
>>> re.search(r‘(([01]{,1}\d{,1}\d|2[0-4]\d|25[0-5])\.){3}[01]{,1}\d{,1}\d|2[0-4]\d|25[0-5]‘, ‘192.168.1.12‘)
<_sre.SRE_Match object; span=(0, 12), match=‘192.168.1.12‘>



本文出自 “Du_wei” 博客,请务必保留此出处http://duwei025.blog.51cto.com/996083/1958546

学习笔记-正则表达式

标签:正则

原文地址:http://duwei025.blog.51cto.com/996083/1958546

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!