正则表达式(2)

 re.findall:https://www.cnblogs.com/xieshengsen/p/6727064.html

 自己爬虫遇到的一些例子:


<a href="/song?id=287063">我怀念的</a>

<a href="/song\?id=\d+">(.*?)</a>,其中?匹配需要转义,\d表示匹配[0-9],\d+表示匹配多位数字


<dd>
                        <i class="board-index board-index-1">1</i>
    <a href="/films/1203" title="霸王别姬" class="image-link" data-act="boarditem-click" data-val="{movieId:1203}">
      <img src="//s3plus.meituan.net/v1/mss_e2821d7f0cfe4ac1bf9202ecf9590e67/cdn-prod/file:5788b470/image/loading_2.e3d934bf.png" alt="" class="poster-default" />
      <img data-src="https://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c" alt="霸王别姬" class="board-img" />
    </a>
    <div class="board-item-main">
      <div class="board-item-content">
              <div class="movie-item-info">
        <p class="name"><a href="/films/1203" title="霸王别姬" data-act="boarditem-click" data-val="{movieId:1203}">霸王别姬</a></p>
        <p class="star">
                主演:张国荣,张丰毅,巩俐
        </p>
<p class="releasetime">上映时间:1993-07-26</p>    </div>
    <div class="movie-item-number score-num">
<p class="score"><i class="integer">9.</i><i class="fraction">5</i></p>        
    </div>

      </div>
    </div>

                </dd>

这是猫眼电影爬虫的匹配,要得到电影排名,电影链接,电影名称,电影主演,电影上映时间等信息,用正则进行匹配(感觉很随意,用了很多贪婪匹配):

<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
                         + '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
                         + '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>'


1. 去掉逗号和空格

[]:匹配内部的任一字符或子表达式

+:匹配前一个字符或子表达式多次

​import re
some_text = 'a,b,,,,c d'
reObj = re.compile('[, ]+')
list=reObj.split(some_text)
print(list)
import re
some_text = 'a,b,,,,c d'
re.split('[, ]+',some_text)

输出:['a', 'b', 'c', 'd']

 2.找出含有某个字母的单词

\w:匹配任意字母数字下划线

*:匹配前面的字符或者子表达式0次或者多次

import re
text="JGod is a handsome boy ,but he is a ider"
print re.findall(r'\w*o\w*',text)  #查找有o的单词
import re
text="JGod is a handsome boy ,but he is a ider"
regex=re.compile(r'\w*o\w*')   #r 表示原生字符串
print regex.findall(text)

输出: ['JGod', 'handsome', 'boy']

正则表达式中的三组括号把匹配结果分成三组,group() 同group(0)就是匹配正则表达式整体结果,group(1):列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。若没有匹配成功的,re.search()返回None。

[0-9]:0123456789任意之一

[a-z]:小写字母任意之一

[A-Z]:大写字母任意之一

注意:这里只能用search,返回的是str类型,后面有group函数,而find和findall函数返回的都是列表,不能用group

import re
a = "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)   #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值