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