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())

 

posted @ 2018-06-23 21:09  xiaodingzi  阅读(206)  评论(0编辑  收藏  举报