博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python正则表达式
阅读量:6529 次
发布时间:2019-06-24

本文共 2814 字,大约阅读时间需要 9 分钟。

一、常用方法

findall:匹配所有符合规律的内容,返回包含结果的列表

search:匹配并提取第一个符合规律的内容,返回一个正则表达式对象(Object)

sub:替换符合规律的内容,返回替换后的值。

S:表示多行匹配

注意:findall与search的区别:

findall会遍历整个加载范围里的内容,并逐一返回匹配到的内容;

而search一旦匹配到指定内容就不再往下匹配,返回结果,搜索结束。

二、常用符号:

.号:匹配任意字符,换行符\n除外

>>> import re>>> a='xy123'>>> b=re.findall('x.',a)>>> print (b)['xy']>>> b=re.findall('x..',a)>>> print (b)['xy1']

 

*号:匹配前一个字符0次或无限次

>>> a='xyxy123'>>> b=re.findall('x*',a)>>> print (b)['x', '', 'x', '', '', '', '', '']

 

?号:匹配前一个字符0次或1次

>>> a='xyxy123'>>> b=re.findall('x.?',a)>>> print b['x', '', 'x', '', '', '', '', '']

注意:' '表示是匹配0次

+号:匹配前一个字符至少一次(一次或多次)

>>> a='xyxy123'>>> b=re.findall('x+',a)>>> print b['x', 'x']

 

.*号:贪心算法

>>> import re>>> secret_code='hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'>>> b=re.findall('xx.*xx',secret_code)>>> print b['xxIxxfasdjifja134xxlovexx23345sdfxxyouxx']

 

.*?号:非贪心算法

>>> import re>>>secret_code='hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'>>> b=re.findall('xx.*?xx',secret_code)>>> print b['xxIxx', 'xxlovexx', 'xxyouxx']

 

():括号内的数据作为结果返回

>>> import re>>>secret_code='hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'>>> b=re.findall('xx(.*?)xx',secret_code)>>> print b['I', 'love', 'you']

#匹配纯数据方法举例(\d+)

>>> a='asdfefrg137143fdfhxs4321ddfdvsdf543dd'>>> b=re.findall('(\d+)',a)>>> print b['137143', '4321', '543']

 当匹配指定内容是,若遇到具有特殊意义的字符,如|、\n、?等,需要用\去掉特定含义。

s='>1ABA:A|PDBID|CHAIN|SEQUENCE're.findall('>(.*?)\|',s)['1ABA:A']

search()和group()配套使用

正则表达式中,group()用来提出分组截获的字符串,()用来分组

import rea = "123abc456"print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整体print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abcprint re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456

分析:

1. 正则表达式中的三组括号把匹配结果分成三组

  •  group() 同group(0)就是匹配正则表达式整体结果
  •  group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。

2. 没有匹配成功的,re.search()返回None

3. 当然郑则表达式中没有括号,group(1)肯定不对了。

 

实战--制作文本爬虫

目标网址:http://www.imtech.res.in/raghava/sarpred/data/Manesh-215/PSSM/

目标内容:提取指定的文件内容

实现原理:

1.保存网页源代码

2.python读取文件加载源代码

3.正则表达式提取

4.写#coding=utf-8

import urllibimport redef getHtml(url):    page=urllib.urlopen(url)    html=page.read()    return html    def getReq(html):     reg1=r'href="(.*?\.mtx)">'    reg2=r'href="(.*?)\.mtx">'    mtx=re.compile(reg1)    title=re.compile(reg2)    mtxlist=re.findall(mtx,html)    titlelist=re.findall(title,html)    fp=open('D://Manesh-215.txt','w')    i=0    for requrl in mtxlist:        strurl='http://www.imtech.res.in/raghava/sarpred/data/Manesh-215/PSSM/'+requrl        mtxpage=urllib.urlopen(strurl)        mtxhtml=mtxpage.readlines()        st=">query | "+titlelist[i]+" | Length="+mtxhtml[0]        fp.write(st)        fp.write(mtxhtml[1])        i=i+1    fp.close()

 

转载于:https://www.cnblogs.com/chaofn/p/4590522.html

你可能感兴趣的文章
中兴计划2017年泰国收入实现50%的增长
查看>>
德国禁止Facebook利用WhatsApp用户信息:没法律基础
查看>>
全球太阳能产业掣肘在哪儿?
查看>>
“灾备全生态”全揭秘
查看>>
CSS盒子模型
查看>>
Zeppelin Prefix not found.
查看>>
ubuntu中eclipse安装svn插件问题
查看>>
linux 的网络设置
查看>>
首届“欧亚杯”象翻棋全国团体邀请赛圆满收评!
查看>>
编译tomcat
查看>>
最简单 iText 的 PDF 生成方案(含中文解决方案)HTML 转为 PDF
查看>>
MySql中is NULL、ISNULL()和IFNULL()运行速度的比较
查看>>
关于unichar字符串的初始化
查看>>
oracle-xe手工创建数据库
查看>>
Cisco交换机 链路聚合
查看>>
我的友情链接
查看>>
好程序员HTML5大前端分享web前端面试题集锦二
查看>>
UG中卸载被占用的DLL
查看>>
eclipse 设置注释模板详解,与导入模板方法介绍总结
查看>>
Cocos2d-x3.2 文字显示
查看>>