regular expresion由一系列特定字符及其组合成的字符串,用来对目标字符串进行过滤操作。,如手机号码,身份证号码,网址等校验。
re相关知识点
python正则表达式库为re,用import re导入,在然后用re.compile(pattern,flag)将正则表达式字符串编译成正则表达式对象。在利用re提供的内置函数对字符串进行匹配,搜索,替换,切分和分组等操作。
flag常用的取值:
re.I 忽略大小写,re.X 忽略空格
import re
def check(string):
p=re.compile("^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$",re.I)
if p.match(string):
print("%s符合规则"%string)
else:
print("%s不符合规则"%string)
st1='[email protected]'
st2='[email protected]'
check(st1)
check(st2)
[email protected]符合规则
[email protected]符合规则
re.match()从起始位置匹配
re.search()搜索整个字符串匹配,搜索成功返回起始位置和终止位置。
re.findall()以列表形式返回全部匹配的子串
>>> print(p.match('dAA00'))
None
>>> re.match('adf','sdadfg')
>>> re.search('adf','sdadfgadf')
<_sre.SRE_Match object; span=(2, 5), match='adf'>
>>> re.findall('adf','sdadfgadf')
['adf', 'adf']
切分
在实际应用中,不同数据源用不同的分隔符,可能是空格,制表符号,逗号等等。 利用正则表达式和split()函数,可以方便的分开。
re.split(pattern,string[,maxsplit])
.分隔开
>>> st='https:\\www.baidu.com'
>>> lt=re.split('\.',st)
>>> lt
['https:\\www', 'baidu', 'com']
逗号和空格分隔。
>>> st='df lx 23,77'
>>> li=re.split('[\s\,]',st)
>>> li
['df', 'lx', '23', '77']
替换,利用re库中sub()和subn()函数,可以将正则表达式所匹配的内容换成指定的字符串。
sub()返回的是替换后的字符串
subn()是以元组类型还回新字符串和替换的次数。
关键字和谐,re写的还是有点问题
>>> p=re.compile('sb' or 'fuck' or '傻逼')
>>> say='are you sb? i want to fuck you. 大傻逼'
>>> print(p.sub('***',say))
are you ***? i want to fuck you. 大傻逼
>>> print(p.subn('***',say))
('are you ***? i want to fuck you. 大傻逼', 1)
>>> p=re.compile('[sbfuck傻逼]
下载交友专题的妹子图片.
我已经正则表达式,匹配了10篇文章,但是有些没有图片,有些
图片标签匹配不对,有时间在修改了. 准备遍历整过专题,下载所有图片,嘻嘻,还要判断性别,找出老乡.
import urllib.request
import urllib.parse
import re
import os
def get_road(url0):
req=urllib.request.Request(url0)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
response=urllib.request.urlopen(req)
html=response.read().decode("utf-8")
pattern=re.compile(r'
下载图片