正则表达式和re模块
1. 正则表达式 匹配字符串
元字符
. 除了换行
\w 数字, 字母, 下划线
\d 数字
[] 字符组
^ 字符串的开始
$ 字符串的结束
| 或者
[^xxx] 非xxxx
\s 空白符
\n 换行
\t 制表符
\b 单词的边界
\W 非数字, 字母, 下划线
\D 非数字
\S 非空白符
量词
* 0->n
+ 1->n
? 0->1
{p} p次
{p,q} p->q次
{p,} 至少p次
贪婪
.*
.+
惰性:
.*? 尽可能少的匹配
转义 \\\\n => \\n => \n
正则前面加r
分组 ()
2. 在python中使用正则. re模块
在python中获得的正则取一个名字 (?P<name>正则)
1. search() 搜索. 搜索到第一个结果返回
2. match() 匹配. 收到一个结果返回. 从头开始匹配
3. findall() 查找所有匹配结果
4. finditer() 返回迭代器.
5. compile() 编译
import re a = re.compile(r"\d+") # 编译了一段正则. 加载了一段正则 lis = a.findall("卢本伟就是55开,再来10个马飞,跟开哥也还是55开") print(lis)
a = r'\d+' # 这个是正则的字符串 ,跟编译正则有本质的区别
lis2 = re.findall(a,"卢本伟就是55开,再来10个马飞,跟开哥也还是55开")
print(lis2)
6. group("name") 获取数据
7. re.S 忽略掉 . *? 的换行
import re a = re.findall("\d","卢本伟是56开") print(a) b = re.finditer("\d","卢本伟是56开") for i in b : print(i.group()) c = re.search("\d","卢本伟是56开") print(c.group()) d = re.match("\d","56开是卢本伟") print(d.group()) kai = re.finditer(r"卢本伟是(?P<aname>.*?),他有一个小弟叫(?P<bname>.*?),","卢本伟是55开,他有一个小弟叫马飞飞,他们关系很好的",re.S) for i in kai : print(i.group("aname"),i.group("bname"))
3.模块的导入
import
from xxx import xxxx
1. 导入模块的执行的步骤
2. 自定义模块
3. 自定义包(难点)
一个表达式 -> 一条语句 -> 语句块 -> 函数 -> 类 -> 模块 -> 包 -> 项目
包就是我们的文件夹, 包内可以写很多个模块(py文件)
查找路径是:sys.path, 随动. 跟着你的启动文件所在的位置变化
不论使用绝对导入. 还是相对导入. 启动文件一定在最外面