正则表达式 - re模块

正则表达式

正则表达式

Regular Expression,正则表达式,一种使用表达式的方式对字符串进行匹配的语法规则。
我们抓取到的网页源代码本质上就是一个超长的字符串,想从里面提取内容。用正则再合适不过了。
正则的优点:速度快,效率高,准确性高
正则的缺点:新手上手难度有点儿高。
不过只要掌握了正则编写的逻辑关系,写出一个提取页面内容的正则其实并不复杂
正则的语法:使用元字符进行排列组合用来匹配字符串在线测试正则表达式https://tool.oschina.net/regex/
元字符:具有固定含义的特殊符号,默认匹配一个字符串

常用元字符:
. 		匹配除了换行符以外的任意一个字符
\w		匹配字母或数字或下划线
\s		匹配任意空白符
\d		匹配数字
\n		匹配一个换行符
\t		匹配一个制表符
^		匹配字符串的开头位置
$		匹配字符串的结尾位置
\W		匹配非字母或数字或下划线
\D		匹配非数字
\S		匹配非空白符
a|b		匹配字符a或字符b
()		匹配括号内的表达式,也表示一个组
[...]	匹配字符组中的字符
[^...]	匹配除了字符组中字符的所有字符


量词:控制前面的元字符出现的次数
*		重复零次或更多次
+		重复一次或更多次
?		重复零次或一次
{n}		重复n次
{n,}	重复n次或更多次
{n,m}	重复n到m次

re模块

那么接下来的问题是,正则我会写了,怎么在python程序中使用正则呢?答案是re模块
re模块中我们只需要记住这么几个功能就足够我们使用了

  • findall、finditer、match等方法讲解
  • 案例1:编写代码
    在这里插入图片描述
import re
#案例1:通过正则表达式获取字符串的数字:"我的电话号码是:18228980250,我另外一个号码是:10086"
#findall 匹配字符串中所有符合正则的内容
lst=re.findall(r"\d+","我的电话号码是:18228980250,我另外一个号码是:10086")
print(lst)



print("------下面是findier方法的结果------")
#finditer 匹配字符串中所有的内容[返回的迭代器],从迭代器中拿内容需要group
it=re.finditer(r"\d+","我的电话号码是:18228980250,我另外一个号码是:10086")
for one in it:
    print(one.group())

    
print("------下面是search方法的结果------")
#search 找到一个结果就返回,返回的结果为match对象,拿内容需要调用group方法
ones = re.search(r"\d+","我的电话号码是:18228980250,我另外一个号码是:10086")
print(ones.group())



print("------下面是match方法的结果------")
#match 是从头开始匹配,只匹配一个,用得多,拿内容需要调用group方法
onem = re.match(r"\d+","18228980250,我另外一个号码是:10086")
print(onem.group())


print("------下面是compile方法的结果------")
#预加载正则
obj=re.compile(r"\d+")
it=obj.finditer("18228980250,我另外一个号码是:10086")
for one in it:
    print(one.group())
  • 查看运行结果
    在这里插入图片描述
  • 案例2:编写代码
    在这里插入图片描述
import re

#案例2:通过正则获取下面字符串的内容
##<div class='jay'><span id = '1'>周杰伦</span></div>
##<div class='jj'><span id = '2'>林俊杰</span></div>
##<div class='jolin'><span id = '3'>蔡依林</span></div>
##<div class='buzhi'><span id = '4'>王力宏</span></div>
##<div class='tory'><span id = '5'>不知道是谁</span></div>

s="""
<div class='jay'><span id = '1'>周杰伦</span></div>
<div class='jj'><span id = '2'>林俊杰</span></div>
<div class='jolin'><span id = '3'>蔡依林</span></div>
<div class='buzhi'><span id = '4'>王力宏</span></div>
<div class='tory'><span id = '5'>不知道是谁</span></div>
"""
##obj=re.compile(r"<div class='jay'><span id = '1'>周杰伦</span></div>")

##obj=re.compile(r"<div class='.*?'><span id = '\d+'>.*?</span></div>")

obj=re.compile(r"<div class='(?P<class>.*?)'><span id = '(?P<id>\d+)'>(?P<name>.*?)</span></div>")
it = obj.finditer(s)
for one in it:
    print(one.group())
    print(one.group("class"),one.group("id"),one.group("name"))
  • 查看运行结果
    在这里插入图片描述
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值