第二十三天学习:正则(2)
re.match(pattern, string[, flags])
这个方法将会从string(我们要匹配的字符串)的开头开始,尝试匹配pattern,一直向后匹配,如果遇到无法匹配的字符,立即返回None,如果匹配未结束已经到达string的末尾,也会返回None。两个结果均表示匹配失败,否则匹配pattern成功,同时匹配终止,不再对string向后匹配
import re pattern = re.compile(r'hello') result1 = re.match(pattern, 'hello') result2 = re.match(pattern, 'hello world') result3 = re.match(pattern, 'h hello') print(result1.group()) print(result2) print(result3) 结果: hello <_sre.SRE_Match object at 0x02459608> None
re.search(pattern, string[, flags])
search方法与match方法极其类似,区别在于match()函数只检测re是不是在string的开始位置匹配,search()会扫描整个string查找匹配,match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None。
import re pattern = re.compile(r'hello') result1 = re.search(pattern, 'hello') result2 = re.search(pattern, 'hhh hello') print(result1.group()) print(result2.group()) 结果: hello hello
re.split(pattern, string[, maxsplit])
按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。
re.findall(pattern, string[, flags])
搜索string,以列表形式返回全部能匹配的子串
re.finditer(pattern, string[, flags])
搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器
实例:
import re pattern = re.compile(r'\d+') str1 = 'one1two2three3four4' print(re.split(pattern, str1)) print(re.findall(pattern, str1)) print(re.finditer(pattern, str1)) for i in re.finditer(pattern, str1): print(i, i.group()) #结果: ['one', 'two', 'three', 'four', ''] ['1', '2', '3', '4'] <callable-iterator object at 0x02446DB0> (<_sre.SRE_Match object at 0x00529D40>, '1') (<_sre.SRE_Match object at 0x02489608>, '2') (<_sre.SRE_Match object at 0x00529D40>, '3') (<_sre.SRE_Match object at 0x02489608>, '4')
关于match对象的常用属性和方法
Match对象是一次匹配的结果,包含了很多关于此次匹配的信息
属性:
1.string: 匹配时使用的文本。
2.re: 匹配时使用的Pattern对象。
方法:
1.group([group1, …]):
获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。
2.groups([default]):
以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。
3.groupdict([default]):
返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同上。
import re # 匹配如下内容:单词+空格+单词+任意字符 m = re.match(r'(\w+) (\w+)(?P<sign>.*)', 'hello world!') print "m.string:", m.string print "m.re:", m.re print "m.group():", m.group() print "m.group(1,2):", m.group(1, 2) print "m.groups():", m.groups() print "m.groupdict():", m.groupdict() 结果: m.string: hello world! m.re: <_sre.SRE_Pattern object at 0x00415760> m.group(): hello world! m.group(1,2): ('hello', 'world') m.groups(): ('hello', 'world', '!') m.groupdict(): {'sign': '!'}
同样,search方法的返回对象同样match()返回对象的方法和属性。