python正则表达

这学期的课涉及到处理网页信息,但是具体操作方法老师不在课上教,所以打算自己学一下python爬虫。先从正则表达开始吧。

正则表达模块里面的函数

  1. findall(): 这个函数的用法就是字面意思:找到所有匹配的对象。其返回值是一个列表,如果寻找的目标不存在,则返回一个空列表。输出返回值的方法是直接放在print里,或者赋值给一个变量。(我作为一个小白,遇到大神给出一个函数,但是没有具体用法时候,我就抓耳挠腮不晓得啷个用。所以自己的博客里会记录下具体用法)
import re
hand=open("jane.txt")#打开一个名为jane.txt的文件
handNew=""
for line in hand:
    line=line.rstrip()#去掉每一行结尾的换行符
    handNew=handNew+line
n=re.findall("paru",handNew)#赋值给变量
print(n)
print(re.findall("paru",handNew)) #直接print

findall()有一个特殊的用法:对数据的搜索与解析可同时进行。就是只留下()里的表达:

比如有如下文档jane.txt。现在我想提取x-开头的一列字符串里的浮点数,如果只用[0-9.+]来匹配,会找到文中4.90877。为了避免该情况,可以用
findall加括号

import re
hand=open("jane.txt")#打开一个名为jane.txt的文件
handNew=""
for line in hand:
    line=line.rstrip()#去掉每一行结尾的换行符
    handNew=handNew+line
n=re.findall("X-\S.+?: ([0-9.]+)",handNew) #加括号,留所要
print(n)

有括号和没括号的区别:
在这里插入图片描述

  1. compile(): 返回一个匹配对象,需要和findall(), match(), search()配合使用。返回结果:
re.compile('p.+\x08')
  1. finditer():返回一个iterator,迭代值。可以用for循环显示迭代值里的每一个对象。

接下来的match与search都是只匹配一个对象,返回对象及其位置,如果对象不存在则返回None。

  1. match():匹配字符串的开头。如果开头不匹配,则返回none。例如对jane.txt文档,如果正则表达是“\Sa\S.+?”,则返回none。因为开头是On

  2. search():在整个文档里搜索,返回第一个匹配对象

import re
hand=open("jane.txt")#打开一个名为jane.txt的文件
handNew=""
for line in hand:
    line=line.rstrip()#去掉每一行结尾的换行符
    handNew=handNew+line
n=re.search("\Sa\S.+?",handNew) #加括号,留所要
print(n)
》〉》〉》〉》〉》〉
= RESTART: /Users/cottoncandy/Desktop/cours_content/爹爹不要鼓励我玩物丧志啦/python爬虫/test.py
<re.Match object; span=(3, 7), match='sait'>

正则表达字符

python里面正则表达的字符和基本正则语言里的字符差不多。我只记录下我遇到的新的表达方式或者我不熟练的:

符号含义
\S匹配非空字符
\s匹配空字符
\B匹配非空字符串,不能用于单词首尾
\D匹配非数字字符
( )括号内的在匹配时被忽略,!但在findall()里面相反!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值