正则表达式
来源:互联网 发布:跳舞毯软件 编辑:程序博客网 时间:2024/05/17 03:20
正则表达式在线测试;
http://tool.oschina.net/regex
网页源码:
<div class="bd"> <p class=""> 导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...<br> 1994 / 美国 / 犯罪 剧情 </p>正则表达式:for sel in response.xpath('//div[@id="info"]'):
item['director']=re.findall("(?<=导演\:).+?(?=主演)",str(a))
1)数量词的贪婪模式与非贪婪模式
正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式”ab*”如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词”ab*?”,将找到”a”。
注:我们一般使用非贪婪模式来提取。
(2)反斜杠问题
与大多数编程语言相同,正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符”\”,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\\\\”:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r”\\”表示。同样,匹配一个数字的”\\d”可以写成r”\d”。有了原生字符串,妈妈也不用担心是不是漏写了反斜杠,写出来的表达式也更直观勒
1、re.match 从第一个字符匹配,第一个字符不对,就错误
result=re.match(pattern,content),pattern为正则表达式,content为匹配的文本,非贪婪匹配加?例如(.*?),当匹配有换行符时,在match中加re.S
总结:尽量使用泛匹配,使用括号得到匹配目标,尽量使用非贪婪模式,有换行符就用re.S
2、re.search 扫描整个字符串并返回第一个成功的匹配
总结:为了匹配方便,能用search不要match
3、re.findall 搜索字符串,以列表形式返回全部能匹配的子串(想收集什么就用()标记组)
(1)匹配所有带有超链接的歌信息
results搜索结果以列表形式显示,通过遍历,输出每个列表的内容
(2)匹配所有歌的信息,包括没有超链接
\s空白符,因为有的有换行符有的没有,所以加*?判断。同理,有的有<a>有的没有,然后匹配歌名,通过(\w+)匹配字符串
4、re.sub 替换字符串中每一个匹配的子串后返回替换后的字符串 re.sub(pattern表达式,repl替换成的文字,string原内容)
把符合所写正则表达式的字符串替换成所要替换的字符串,通常跟re.findall一块使用
先把a的开始<a>和结束</a>去掉,然后匹配歌名
5、re.compile
将正则字符串编译成正则表达式对象
实例:爬取豆瓣读书
import requestsimport re#打印网页源码content=requests.get('https://book.douban.com/').text#正则匹配pattern=re.compile('<li.*?cover.*?href="(.*?)".*?title="(.*?)".*?more-meta.*?author">(.*?)</span>.*?year">(.*?)</span>.*?</li>',re.S)#搜索results=re.findall(pattern,content)#遍历结果for result in results: #默认按照顺序赋值 url,title,author,date=result #去除换行符\n,效果类似restrip() author=re.sub('\s','',author) date=re.sub('\s','',date) print(url,title,author,date)效果:
- 【正则表达式】正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 优化分享9
- NLP03-Gensim转换与相似计算
- Arrays的常用功能
- 优化分享10
- Android第三方框架(不断更新中)
- 正则表达式
- 20-初始化列表
- 一个数组先递增后递减求最大值
- Hello CSDN
- 可重入函数与不可重入函数
- PV、TPS、QPS是怎么计算出来的?
- 静态代码块,构造代码块与构造方法的关系
- git 如果队友新上传一个分支 本地应该怎么拉下来
- 电脑进水后自救技巧以及被删除的文件如何恢复方法分享