python模块之re模块
1 # 正则表达式是用来匹配字符串的方法 2 # 字符串本身就有匹配方式,为什么要引入正则表达式? 因为原有的字符串匹配不出来原始的方法 3 # 正则匹配是用来进行模糊匹配的 4 5 s = "alex want to drink" 6 print(s.split(" ")) # 以恐吓 7 print(s.find("a")) # -1 8 9 10 import re 11 # 。 模糊匹配一个字符或者数字或者空格,但是不能匹配换行符号 12 # ^ 行首匹配 13 # $ 结尾匹配 14 # * 匹配前面0到多个字符 注意:0也是一个 0就是没有也会返回一个空字符 15 # + 匹配前面1到多个字符 16 # ? 匹配前面0到1次的字符 前面的字符可能没有,或只有一个 17 # {} 指定匹配的次数范围 {5}或者{1,5}前面的字符匹配5次 'aaaaaab' 这样的字符也是可以取到的 18 # (默认是贪婪匹配 ,按照最多的来,或者按照最少的来) 19 20 # findall() 方法 完全匹配hello 返回列表 21 pp = re.findall("h...o","asdadasdashelloasdasdasd") 22 pp2 = re.findall("^h...o","asdadasdashelloasdasdasd") #匹配不成功 23 pp3 = re.findall("h*","asdashehllohhhhhhasdas") #匹配不成功 ['', '', '', '', '', 'h', '', 'h', '', '', '', 'hhhhhh', '', '', '', '', '', ''] 24 print(pp3)
1 import re 2 #二元字符 3 # [ ] 字符集 匹配给定范围的一个元素 里面是或的关系 4 # [ ] 取消元字符的特殊功能 比如* 就就被当成了普通字符 x 而不匹配多个字符了 但是 ^ \ - 这些字符例外! 5 # [^ ] ^在[ ]中是取反的意思! 6 # [^4,5] 这里的意思是除了4或和除了5的 7 # \ 后面跟元字符会取消其特殊功能,但是后面跟着普通的个别字符可以实现特殊功能 \w 表示一个字母 8 # 如下所示: 9 # \d 匹配任何十进制数;它相当于类 [0-9]。 10 # \D 匹配任何非数字字符;它相当于类 [^0-9]。 11 # \s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。 12 # \S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。 13 # \w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。 14 # \W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_] 15 # \b 匹配一个特殊字符边界,比如空格 ,&,#等 16 # \\ 特殊字符 正则表达方式中的转义符号\\ 会经过python的解释器,那么python解释器需要再解释一遍就是\\\\变成4个字符 17 18 # () 括号内的规则作为一个整体去匹配的 19 # | 管道符号 或 的意思 20 21 #方法二: x=re.search() 找到一个就返回,返回的是个对象 获取这个对象的值的话 f.group() 获取找到的值 22 23 a=re.findall('a[b,v]c','abc') 24 a=re.findall('[a,z]','abc') # 这样子会返回3个结果 分别是a b c 25 print(a) 26 c = re.findall(r"I\b","hello,I am hero I am OK") # 注意转义符号 27 print(c) 28 29 # \\ 转移符号的使用 要理解一下,因为 正则表达式里面转义后需要经过python解释器再转义一遍 30 # 方式一: 31 n = re.search(r'\\c','asdasd\cf') 32 print(n.group()) 33 # 方式二: 34 v = re.search('\\\\c','asdasd\cf') 35 print(v.group()) 36 37 #()与| 的方式使用 38 #()与| 的方式使用 升级版 复杂版 见下面示例 正则与根据组名取值 39 print(re.search("(as)|3","as3").group()) #as 注意 只有一个值 40 # 高级版 41 # <> 是正则表达式中的固定格式 42 ret=re.search('(?P<id>\d{2})/(?P<name>\w{3})','23/com') 43 print(ret.group())#23/com 44 print(ret.group('id'))#23
1 # 正则表达式的方法 2 3 re.findall() 4 re.search().group() 5 re.match() #只在字符串开始匹配 匹配成功返回一个对象,匹配不成功返回none 也只返回一个对象 6 re.split() #重点在这里 如意犯错误 7 re.sub() #相当于replace替换 很好用的方法 8 re.compile() #将规则编译成一个对象去调用,节省代码的使用量 9 10 11 # 这个先按照k进行分组,然后在按照s对k的分组再次进行分组 ['a', 'd', 'dl', 'op'] 12 print(re.split('[k,s]','asdkdlsop')) 13 # 注意容易犯错的地方 s 在分割的开头的话会有个空字符被分割出来 14 print(re.split('[k,s]','sasdkdlsop')) 15 print(re.sub('a..x','s..b','asdalexppm')) #asds..bppm 16 17 #re.compile() 的使用 18 19 pp=re.compile('/.com') 20 ret=pp.findall('asdadd.com') 21 print(ret)
1 import re 2 #迭代器对象 3 ret = re.finditer("\d","asdasda2adsd") 4 #print(next(ret)) 5 print(next(ret).group())