1.字符串中startswith的用法
txt = ['mooc yuwen','mooc shuxue mooc','mooc yingyu','wuli','huaxue','shengwu']
for item in txt:
if item.startswith('mooc'):#字符串中的startswith的用法
print(item)
for item in txt:
if item.startswith('mooc') and item.endswith('mooc'):#字符串中的endswith的用法
print(item)
a = '_value'
a and (a[0] == '_' or 'a'<= a[0]<='z') #判断第一个位置是下划线还是字母
mooc yuwen mooc shuxue mooc mooc yingyu mooc shuxue mooc
2.re中的match使用
import re
str1 = 'imooc python'
pa = re.compile(r'imooc')#找开头的字符
ma = pa.match(str1)#用match调用正则编译的字符串
ma.group()
ma.span()#找到imooc在字符串中的位置
pa2 = re.compile(r'mooc',re.I)#I是ignore的开头字母,即忽略大小写
ma2 = pa2.match('MOOC th MOOC')
ma2.group()
ma3 = re.match(r'imooc',str1)
ma3.group()
3.re匹配一个字符的情况
ma = re.match('.','if') #'.'可以表示任何的一个字符
print(ma.group())
ma2 = re.match('{.}','{a}')
print(ma2.group())
ma3 = re.match('{[a-z]}','{r}') #在[]中的a-z表示从a到z的所有的26个字符,注意一定要有[]
print(ma3.group())
ma4 = re.match('{[a-zA-Z0-9]}','{R}')#若想添加另外一个大写的字母匹配,可以再增加一个A-Z,还可加0-9
print(ma4.group())
ma5 = re.match('{[\w]}','{0}') #此时可以用\w来代替a-zA-Z0-9
print(ma5.group())
ma6 = re.match('{[\D]}','{ }') #要是想匹配一个空格则需要用\W或者\D,而\d是匹配数字型字符
print(ma6.group())
ma7 = re.match('\[[\w]\]','[e]')
print(ma7.group()) #对于[]有特殊意义,需要用转义符进行转义才能使用
i {a} {r} {R} {0} { } [e]
4.re匹配多个字符的情况
ma = re.match(r'[A-Z][a-z]','Aa') #此时匹配的是两个字符串,并且字符串的顺序与规则的大小写顺序不能更换
print(ma.group())
# *匹配前一个字符0次或者无限次
ma1 = re.match(r'[A-Z][a-z]*','Aa') #此时加了*后只管字符串中第一个字符能不能满足条件,其他的字符元素不管,若没*号则不行
print(ma1.group())
ma2 = re.match(r'[A-Z][a-z]*','Serhargharth') #此时要求是字符串第一个元素要大写
print(ma2.group())
ma3 = re.match(r'[A-Z][a-z]*','Seaith6er') #此时不能匹配到数字部分及以后的元素
print(ma3.group())
# +匹配前一个字符一次或者无限次
ma4 = re.match(r'[_a-zA-Z]+[\w]*','_Aerfe4')
print(ma4.group())
# ?匹配前一个字符0次或者1次
ma5 = re.match(r'[1-9]?[0-9]','99') #匹配一个0-99范围内的数字,即十位数1-9可有可无,但个位数0-9必须要有
print(ma5.group())
ma6 = re.match(r'[1-9]?[0-9]*','09') #在后面加*号才能匹配到09
print(ma6.group())
# {m},{m,n}匹配前一个字符m次或者m到n次
ma7 = re.match(r'[\w]{6}','Adb162') #对a-zA-Z0-9匹配6次,但是若匹配字符长度超过6位,也只能匹配到前6位
print(ma7.group())
ma8 = re.match(r'[\w]{6,10}@163.com','zoufyuan@163.com') #匹配一个163的邮箱,前面可以是6-10个字符长度
print(ma8.group())
# *?/+? /??匹配模式变为非贪婪(尽可能少匹配字符)
ma9 = re.match(r'[0-9][a-z]*','1dib')
print(ma9.group())
ma10 = re.match(r'[0-9][a-z]*?','1dib') #ma10与ma9进行对比发现?的作用是尽量少匹配
print(ma10.group())
ma11 = re.match(r'[0-9][a-z]+?','3ehf') #因为+是匹配一次或者是无限次,但是加了?后只会匹配一次,不会把后面的字符串再进行匹配
print(ma11.group())
Aa Aa Serhargharth Seaith _Aerfe4 99 09 Adb162 zoufyuan@163.com 1dib 1 3e
5.re进行边界匹配
#^ 匹配字符串开头,$匹配字符串结尾
ma = re.match(r'^www.[\w]{4,10}.com$','www.baidu.com')#一定要以www开头,.com结尾
print(ma.group())
# \A / \Z 指定的字符串必须出现在开头/结尾
ma1 = re.match(r'\Aimooc[\w]*','imoocpython')
print(ma1.group())
www.baidu.com imoocpython
6.re进行分组匹配
# \ 代表匹配任意一个表达式
ma = re.match(r'abc|d','abc') #取或操作
print(ma.group())
ma1 = re.match(r'[1-9]?\d$|[0-9][0-9][\w]$','999')
print(ma1.group())
# (ab)表示括号中表达式作为一个分组
ma2 = re.match(r'[\w]{4,10}@(163|126).com','zoufyuan@126.com')
print(ma2.group())
# \<number>引用编号为num的分组匹配到的字符串
ma3 = re.match(r'<([\w]+>)\1','<book>book>')
print(ma3.group())
ma4 = re.match(r'<([\w]+>)[\w]+</\1','<book>python</book>')
print(ma4.group())
#(?P<name>) 给分组起一个别名
ma5 = re.match(r'<(?P<mark>[\w]+>)[\w]+</(?P=mark)','<book>python</book>') #此时效果和ma4等价
print(ma5.group())
# (?P=name)引用别名为name的分组匹配字符串,见ma5的相关应用
abc 999 zoufyuan@126.com <book>book> <book>python</book> <book>python</book>
7.re中的其他方法
#search(pattern,string,flags = 0),在一个字符串中查找匹配
str1 = 'imooc have 1000'
info1 = re.search(r'\d+',str1)
print(info1.group())
#findall(pattern,string,flags = 0),找到匹配,返回所有匹配部分的列表
str2 = 'c++ = 100,java = 90,python = 80'
info2 = re.findall(r'\d+',str2)
print(info2)
#sub(pattern,repl,string,count = 0,flags = 0)将字符串中匹配正则表达式的部分替换成其他值
str3 = 'imooc have 1000'
info3 = re.sub(r'\d+','10001',str3)
print(info3)
def add1(match):
val = match.group()
num = int(val) +1
return str(num)
info_3 = re.sub(r'\d+',add1,str3) #可以将自定义的函数传入sub中,此时是身体str3中满足r'\d'的字符串传入add1中
print(info_3)
#split(pattern,string,maxsplit=0,flags = 0) 根据匹配分割字符串,返回分割字符串组成的列表
str4 = 'imooc:c c++ java python'
info4 = re.split(r':| ',str4)
print(info4)
1000 ['100', '90', '80'] imooc have 10001 imooc have 1001 ['imooc', 'c', 'c++', 'java', 'python']
8.利用正则表达式爬虫
import requests #获取页面
from bs4 import BeautifulSoup #解析网页
import urllib
url = 'http://www.58pic.com/tupian/gaokaojiayou.html'
rawhtml = requests.get(url).content#先用request去get url 得到里面的content
soup = BeautifulSoup(rawhtml, 'html.parser')
#print(soup)
plist = re.findall(r'http://.+.jpg',soup.decode('utf-8'))
i = 0
for url in plist:
f = open('C:\\Users\\zou\\Desktop\\picture\\'+'高考加油'+str(i)+'.jpg','wb')
req = urllib.request.urlopen(url)
buf = req.read()
f.write(buf)
i+=1
f.close()