一.re模块的常用方法:
re.findall() 用于返回一个字符串中,所有能被正则表达式所匹配到的字符串,以列表的方式返回。
用法re.findall(正则表达式,字符串)。
s1 = "sadjhjafdsajkhjsdaysadsadduayu"
比如说,想要从上面这一长串字符串中,匹配出a后面有一个任一字符在紧接着一个字母u的字符串。
print re.findall(‘a.u‘,s1)
>>>[‘ayu‘]
re.finditer()作用和findall一样,不过finditer返回的并不是个列表,而是个迭代器对象,如果需要迭代操作,推荐使用finditer方法。
re.search() 在字符串中按照正则表达式去查找匹配所需要的字符串,只找第一个匹配到的结果,然后返回一个match对象,这个对象中包含了,通过正则表达式匹配的信息,我们可以通过执行该对象.group方法去获取所匹配到的字符串,如果找到想匹配的字符串,就回返回一个None。
用法:re.search(正则表达式,字符串,flag)
s1 = "hamasaki ayumi"
print re.search(‘a.u‘,s1).group()
>>>ayu
re.match()字符串中按照正则表达式去查找匹配所需要的字符串,和search不同的是match只会从字符串的开头进行匹配!如果字符串开始不符合正则表达式,则匹配失败!
用法和search是一样的。
re.split()按照指定的正则表达式去拆分字符串。
例:
以所有的字符串做为分隔符。
s = "a1b2c3d4e5"
print re.split(r‘\d‘,s)
>>>[‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘‘]
re.sub()替换,使用正则表达式匹配出字符串中的指定内容,然后将其替换成指定的字符串。
s = "a1b2c3d4e5"
print re.sub(r‘[a-z]‘,‘ayu‘,s)
>>>ayu1ayu2ayu3ayu4ayu5
re.sub()函数还有个参数,可以设置替换多少次。
比如说,只想替换前三个匹配到的。
s = "a1b2c3d4e5"
print re.sub(r‘[a-z]‘,‘ayu‘,s,3)
>>>ayu1ayu2ayu3d4e5
re.subn() 和sub一样,都是通过正则来替换字符串内容的功能,但是subn会返回一个元组,这个元组里不单单只有替换后的字符串,还包含了这个字符串中的内容被替换了几次。
例如:
s = "a1b2c3d4e5"
print re.subn(r‘[a-z]‘,‘ayu‘,s)
>>>(‘ayu1ayu2ayu3ayu4ayu5‘, 5)
re.compile() 编译,可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。
二.python正则表达式之分组。
python中正则常用的分组方式大概分为两种。
方法1:
print re.search(r‘(^\d{3,4})-(\d{3,8})‘,‘010-123456‘).group(0)
>>>010-123456
print re.search(r‘(^\d{3,4})-(\d{3,8})‘,‘010-123456‘).group(1)
>>>010
print re.search(r‘(^\d{3,4})-(\d{3,8})‘,‘010-123456‘).group(2)
>>>123456
如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串。
注意到group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串。
方法2:
命名分组
print re.search(r‘(?P<zone_num>^\d{3,4})-(?P<phone_num>\d{3,8})‘,‘010-123456‘).group("zone_num")
>>>010
print re.search(r‘(?P<zone_num>^\d{3,4})-(?P<phone_num>\d{3,8})‘,‘010-123456‘).group("phone_num")
>>>123456