正则表达式 re模块

 

 

 1 数字:
 2 [0-9]
 3 
 4 字母:
 5 小写 [a-z]
 6 大写 [A-Z]
 7 大小写 [A-Za-z]
 8 
 9 数字和大小写字母[A-Z0-9a-z]
10 
11 大小写字母+下划线:
12 [A-Z0-9a-z_]

正则式转义:

在字符组当中 -是有特殊意义的,如果我们想取消这个横杠的特殊意义
需要使用\作为转义符

 1 字符组之外的其他带有特殊规则的元字符:
 2 [0-9] \d 匹配任意一个数字 digit
 3 [A-Z0-9a-z_] \w 标识符
 4 \n 匹配回车换行
 5 \t 匹配制表符 table
 6 空格 本身匹配 空格
 7 \s 匹配所有的空白  \d 匹配所有的数字  \w 匹配数字字母以及下划线
 8 \b 匹配一个单词的边界
 9 反义词
10 \W 除了数字字母下划线之外的所有
11 \D 除了数字之外的所有
12 \S 除了空白之外的所有
13 
14 . 匹配换行符之外的所有字符
15 
16 匹配所有 :[\D\d] [\W\w] [\S\s]
17 非字符组 :[^123]除了123之外的都匹配
18 
19 和结束符
20 ^ 永远在一个规则的最开始
21 $ 永远在一个规则的最末尾
22 ^和$ 规定了这个字符串的长度,并且在这个长度内的内容
23 
24 | 或的概念
25 123|456
26 把相对长的永远放在左侧
27 
28 www.baidu.com
29 www.oldboy.com
30 
31 分组的概念
32 www\.(baidu|oldboy)\.com

 

1 量词的范围内尽可能多的匹配
2 {n} 表示出现n次
3 {n,} 表示至少出现n次
4 {n,m} 表示出现n-m次
5 ? 表示匹配0次或1次
6 + 表示匹配1次或多次
7 * 表示匹配0次或多次

 

1 贪婪匹配 :默认的 尽可能多匹配
2 惰性匹配 :需要我们手动设置的 尽可能少匹配
3 a.* 以a开头的任意一个字符串都可以被匹配出来
4 a.*? 非贪婪
5 a.*?x 从a开始匹配,匹配任意长度的字符,遇到一个x就立即停止

 

re模块:

findall  

 1 re.findall(pattern, string, flags=0)
 2 #根据正则规则从一段内容中查找结果,找到就返回,没找到就返回空列表
 3 import  re
 4 ret= re.findall('\d+','alex123yuan234')
 5 print(ret)
 6 
 7 分组与re.findall()的结合:
 8 import re
 9 ret = re.findall('>(\w+)<',r'<title>qqxing<\title>')
10 print(ret)  # findall永远优先显示分组中的内容
11 
个人理解:#分组左右两边输入的内容相当于指定了查找边界,找到了就返回,没找到返回空列表。

search

1 ret = re.search('\d+','alex66yuan')
2 if ret:
3     print(ret.group())

 

1 ret= re.search('\d+','alex123yuan234')  #找到正则式规则里的第一个就返回元素
2 ret1= re.search('(\w*?)(\d+)(\w*?)(\d+)','alex123yuanx234') 
3 #按规则将字符串分组,可以按照组的索引取值
4 print(ret)  # 结果对象
5 print(ret.group())
6 print(ret1.group(1))
7 print(ret1.group(2))
8 print(ret1.group(3))
9 print(ret1.group(4))

 

match:从字符串开头开始找,没找到就报错,找到就返回

1 ret = re.match('\d+','123alex266')
2 print(ret)
3 print(ret.group())
1 match可以使用search进行替代
2 re.search('^\d+','alexyuan') == re.match('\d+','123alex')
3 ret = re.search('^\d+','2alexyuan')
4 print(ret.group())

 

sub :替代,可设置替代次数




posted @ 2019-03-21 21:06  吃汤圆啦i  阅读(183)  评论(0编辑  收藏  举报