关于正则的简单介绍(会的不用看系列)

2.1正则(re)模块

正则在Python中应用非常广泛,如:特定字符串的查找、切割与替换等, 特定格式(邮箱、手机号、IP、URL)的校验,爬虫提取特定内容,所以在爬虫中, 正则还是比较重要的,它会帮你提取到你需要的信息。

使用原则

正则效率比较低,会较低代码可读性, 所以字符串函数可以解决的问题就不要使用正则。

世界上最难以理解的三样东西:道士神符、医生处方、码农正则。

不清楚功能不要去阅读别人的正则,正则是用来写的,不是读的。

说明:我们需要解析正则,只是使用,所以需要借助’re’模块

(1)正则相关函数:

match:从开头进行匹配,匹配到返回结果,没有返回None

search:任意位置匹配,功能和match一样,都是单次的,找到就会停止

findall:匹配全部,返回所有匹配的结果列表,没有返回空列表

compile:创建正则表达式对象,让匹配内容和对象分开操作

例子(不创建正则对象):


import re

m = re.search('abc', 'hadajabcadjlae')

if m:
#返回匹配的内容
	print(m.group())

#返回匹配内容的位置

	print(m.span())

例子(创建正则对象):

import re

c = re.compile('cba')

# 从开头匹配

#m = c.match('cbasdhaj; acbaalsdk')

#从任意位置匹配

m = c.search('casdhaj; acbaalsdk')

if m:

	print(m.group())

(1)匹配单个字符

普通字符:就是一对一的完全匹配

[]表示中间的任一字符

如:[abcde]表示abcde的任一字符

\d表示数字字符,和[0-9]等价

\D表示非数字字符,和[^0-9]等价

\s表示空白字符(\n、\r、\t、空格)

\S表示非空白字符(\s相反的内容)

\b表示词边界(开头、结尾、空格、标点)

\B表示非词边界(\b相反的内容)

\w表示匹配字(数字、字母、下划线)

\W表示匹配非字(\w相反的内容)

.表示除了’\n’以外的任意字符

(2)次数限定

说明:为了修饰前面的单个字符出现的次数

  • :至少一次

? :至多一次

{m}:指定m次

{m,n}:m <= 次数 <=n

{m,}:至少m次

{,m}:至多m次

  • :任意次

(3)边界限定

^:以指定的内容开头

$:以指定的内容结尾

(4)优先级与整体

 |:表示或,拥有最低的优先级
 ():可以表示一个整体

(5)findall的特殊之处

说明: 按照正则进行匹配,但是添加()后,结果只显示()匹配的内容

例子3:

f = re.findall('A(abc)A', 'asdjAabcAasdjAabcAsdkabca')

print(f)

(6)贪婪匹配

贪婪:最大限度的匹配。 正则的匹配默认是贪婪的

非贪婪:只要满足条件,能少匹配就少匹配。 可以使用’? '取消贪婪

.+? :取消至少一次的贪婪匹配

.*? :取消任意多次的贪婪匹配

简单来说就是能少匹配就少匹配内容

(7)字符转义

说明:匹配凡是跟正则语法相关的字符都需要进转义, 通常在字符串前加r或在字符前加,推荐使用第一种

(8)正则切割

和字符串切割一样使用split函数

例子:


import re

c = re.compile(r'\d')

string = '正则其实不难1但是学完之后2发现什么也不出来3是这样吧'
#字符串是固定切割,不能解决某类的匹配切割问题
#print(string.split('1'))
# 按照正则进行切割
#1.创建表达式

ret = c.split(string)

print(ret)

#2.不创建表达式

print(re.split(r'\d', string))

(9)正则替换

使用sub函数

例子:

import re

s = 'how1are2you'

#正则替换,以空格替换数字

s2 = re.sub(r'\d', ' ', s)

print(s2)

总结

正则是用来写的,所以千万不要硬读别人的正则。 正则在爬虫中会经常用到,所以学好正则对爬虫很关键。 当然,正则还有其他的应用和用法,但是爬虫基本上能用的就这些了, 其他的如果有兴趣可以从网上搜一下,有很多关于Python正则的介绍呢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值