python_正则表达式

正则表达式:将数据进行筛选的一种表达式

原子是正则表达式中最基本的组成单位,每个表达式中至少含有一个原子,

1.普通字符作为原子,2.非打印字符作为原子,3.通用字符作为原子,4.原子表

使用正则表达式需先导入re模块

re.search(条件,范围)

>>> import re
>>> pat = 'yue'
>>> string = 'http://yum.iqianyue.com'
>>> rse = re.search(pat,string)
>>> print(rse)
<re.Match object; span=(16, 19), match='yue'>
import re
tj = 'hel[l,1,I]o'
fw1 = 'axuawnxaihel1o'
fw2 = 'axuawnxaihelIo'
fw3 = 'axuawnxaihello'
res1 = re.search(tj,fw1)
res2 = re.search(tj,fw2)
res3 = re.search(tj,fw3)
print(res1,res2,res3)
#条件可以在【】中任意一个

/w:匹配非特殊字符               _______/W:匹配特殊字符

/d:匹配十进制数      /D:匹配非十进制数

/s:匹配任意空白字符    /S:匹配非空白字符

元字符:正则表达式中具有特殊意义的字符,比如重复n此前面的字符

.:匹配任意字符

^:匹配字符串开始的位置,在原子表里面代表非

$:匹配字符串结束的位置

*:匹配0次,1次,多次的字符串

?:匹配0次或一次

+:匹配一次或多次

x{自定义}:匹配x自定义的次数

{n,}:至少出现了n次

{n,m}至少出现 了n次,最大出现了m次

|:模式选择符,或

():提取某一内容

模式修正符:在不改变 正则表达式的情况下改变正则表达式的含义

I(i):忽略表达式不区分大小写

M:实现多行匹配

L:本地化识别匹配

U:根据uncode字符解析字符

S:让.匹配换行符

 

import re
tj = 'python'
fw1 = 'axuawnxPyThonaihel1o'
res1 = re.search(tj,fw1,re.I)
print(res1)

懒惰模式,贪婪模式,全区搜索

.*:贪婪模式,搜索到第一个条件然后到最后一个条件,如果中间满足条件则不停止

import re
tj = 'p.*y'
fw1 = 'atyupxuawnxPyThonaihel1oy'
res1 = re.search(tj,fw1,re.I)
print(res1)
#<re.Match object; span=(4, 25),  match='pxuawnxPyThonaihel1oy'>

/*?:懒惰模式:跟贪婪模式相对,中间出现满足条件则直接终结

import re
tj = 'p.*?y'
fw1 = 'atyupxuawnxPyThonaihel1oy'
res1 = re.search(tj,fw1,re.I)
print(res1)
#<re.Match object; span=(4, 13), match='pxuawnxPy'>

re.match(条件,范围):开头必须为条件否则直接为None,跟懒惰模式差不多

re.compile(条件).findall(范围):全局搜索,将范围内所有满足条件的全部列举出来

import re
tj = 'p.*?y'
fw1 = 'ptyupxuawnxPyThonaihel1oy'
res1 = re.compile(tj).findall(fw1)
print(res1)
#['pty', 'pxuawnxPy']

匹配一个.com或.cn的网址

import re
pa= "[a-zA-Z]+://[^\s]*[.com|.cn]"
fw = '<a href="http://www.baidu.com">head</a>'
w = re.compile(pa).findall(fw)
print(w)
#[a-zA-Z]+是指http必须出现一次
#[^\s]是指从开头非空白字符
#:*是指匹配多个字符串
#[.com|.cn]是指二选一

爬取网站qq群号

 

import urllib.request
import re
tes = '<e>(.*?)</e>'
fw = urllib.request.urlopen('http://sd.huatu.com/zt/qqun/').read()
p1 =re.compile(tes).findall(str(fw))
print(p1)

 在爬取数据时,数据必须进行编码

例如data = 

urllib.request.urlopen("http://www.ttmeishi.com/QQqun/").read()

 data = data.decode('编码')

 

urllib模块基础

urlretrieve(url,filename=本地地址):将网站爬取到本地
urlcleanup():将urlretrieve产生的本地缓存清除
info:将基本环境的信息展现出来
getcode:获取网站的状态码
geturl:获取网站的网址

posted @ 2019-07-13 15:17  Alom  阅读(130)  评论(0编辑  收藏  举报