常用模块
常用模块
re模块
1,什么是正规?
正规就是用一些特殊含义的符号组合在一起,来描述字符或者字符串的方法,
2常用匹配模式
\w :匹配字母数字以及下划线
print(re.findall(‘\w’,'hello egon 123'))
\W :匹配非字母数字下划线
print(re.findall('\W','ab 12\+-*&_'))
\s :匹配任意空白字符,等价于【\t\n\r\f】
print(re.findall('\s','ab \r1\n2\+-*&_'))
\S :匹配任意非空白字符
print(re.findall('\S','db \r1\n2\t\+-*&_'))
\d :匹配任何数字,等价于(0-9)
print(re.findll('\d','ab \r1\n2\t\+-*&_'))
\D :匹配非任何非数字
print(re.findall('\D','db \r1\n2\t\+-*&_'))
\A:匹配字符串开始
print(re.findall('\Aalex','abcalex is salexb'))
\Z:匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
print(re.findall('sb$','alexsb is sbalexbsb'))
\z:匹配字符串结束
\G:匹配最后匹配完成的位置
\n:匹配一个换行符
\t:匹配一个制表符
^:匹配·字符串开头
print(re.findall('^h','hello egon 123'))
$:匹配字符串的末尾
print(re.findall('sb$','alexsb is abalexbsb'))
.:匹配任意字符,除了换行符,当re。DOTALL标记被指定时,可以匹配包括换行符的任意字符。
[...]:用来表示一组字符,单独例出:【amk】匹配‘a’,‘m’或者‘k’
[^...]:不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
*:匹配0个或多个的表达式
print(re.findall('ab*','a')) #['a']
+:匹配1个或多个的表达式
print(re.findall('ab+','a')) #[]
? :匹配0个或1个由前面1正则表达式定义的片段,非贪婪方法
print(re.findall('ab?','a')) #['a']
{n}:精确匹配n个前面表达式
{n,m}:匹配n到m次由前面的正则表达式表达
print(re.findall('ab{2}','abbb')) #['abb']
d|b:匹配a或者b
print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
# 重复匹配
# . ? * + {m,n} .* .*?
.: 代表除了换行符外的任意一个字符
print(re。findall(‘a.c’,'abc alc aAc aaaaaca\nc'))
print(re.findall('a.c','abc alc aAc aaaaaca\nc',re.DOTALL))
?: 代表左边哪一个字符重复0次或者1次
print(re.findall('ab?','a ab abb abbb abbbb'))
*: 代表左边哪一个字符出现0次或者无穷次
print(re.findall('ab*','a ab abb abbb abbbbbb'))
.*:匹配任意长度,任意的字符====》贪婪匹配
print(re.findall('a.*c','ac al23c aaaac a *123)()c asbfasfdsdf'))
():匹配括号内的表达式,也表达一个组
print(re.findall('ab+','ababab123'))
.*? :非贪婪匹配
print(re.findall('a.*?c','a123456c'))
{m,n} :代表左边哪一个字符出现m次到n次
print(re.findall('ab{0,}','a ab abbbb abbbbbb'))
print(re.findall('ab{1,3}','a abbb abbbbbb abbbbbbb'))
shelve 模块(了解)
shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型
import shelve
f=shelve.open(r'sheve.txt')
# f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
# f['stu2_info']={'name':'gangdan','age':53}
# f['school_info']={'website':'http://www.pypy.org','city':'beijing'}
print(f['stu1_info']['hobby'])
f.close()
xml模块
(了解)
xml是实现不同语言或程序之间进行数据交换的,和json差不多,没有json方便
<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>
复制代码
xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml:
# print(root.iter('year')) #全文搜索
# print(root.find('country')) #在root的子节点找,只找一个
# print(root.findall('country')) #在root的子节点找,找所有