python中re模块函数及查找对象的方法
match()与search()函数
match函数尝试使用括号内的正则表达式从字符串的开头进行匹配,如果匹配成功则返回一个对象,否则返回None。search()函数使用括号内的正则表达式从字符串首次出现的位置开始查找,如果匹配成功则返回一个匹配对象,否则返回None。
举例如下:
>>>import re
...re.match('app', 'app123').group()
'app'
从’app123’的开头处寻找字符串’app’,匹配成功,返回’app’
>>> import re
...re.match('app', '123app').group()
AttributeError: 'NoneType' object has no attribute 'group'
因为字符串’123app’开始处不能匹配’app’,所以匹配失败,无法返回匹配对象。
>>>import re
... re.search('app', '123app').group()
'app'
因为search()函数不要求从字符串的开始处进行匹配,只从字符首次出现的位置进行匹配,所以匹配成功。
匹配多个字符串(|)
(在正则表达式中,|
表示匹配多个字符)
import re
bt = 'bat|bet|bit'
re.match(bt, 'bit').group() # 返回 'bit',匹配成功
re.match(bt, 'He bit me').group() #匹配失败: 字符串开头没有bt中的字符串
re.search(bt, 'He bit me') # 返回'bit'匹配成功
匹配任意单个字符(.)
(在正则表达式中,.
表示匹配任意字符,换行符\n
和空字符串除外)
import re
anyend = '.end' # 如果要匹配'.'和end,即此处的'.'没有特殊意义,则在'.'前加上转意符'\',即anyend = '\.end'
re.match(anyend, 'bend').group() #匹配成功 返回'bend'
re.match(anyend, 'end').group() #匹配失败,因为在anyend中,end前要有一个任意字符,而'end'中缺少一个与'.'对应的任意元素
re.match(anyend, '\nend').group() #匹配失败,'.'不能匹配换行符
re.search(anyend, 'Theend').group() #匹配成功,返回‘eend’
创建字符集合[]
(正则表达式中,表示匹配[]
中任意一个字符)
>>>import re
>>>re.match('[cr][23][dp][o2]', 'c3po').group() # 匹配成功
'c3po'
创建子组()
(将括号内的匹配结果单独存储为一个子组)
>>>re.match('\w\w\w-\d\d\d', 'abc-123') .group() # \w表示字母或数字,\d表示数字
'abc-123'
>>>re.match('(\w\w\w)-(\d\d\d)', 'abc-123').group(1)
'abc'
>>>re.match('(\w\w\w)-(\d\d\d)', 'abc-123').group(2)
'123'
>>>re.match('(\w\w\w)-(\d\d\d)', 'abc-123').groups()
('abc', '123') # 返回结果为一个元组的形式