08.爬虫---强大的正则表达式

1.介绍

正则表达式(Regular Expression,简称Regex或RegExp)是一种强大的文本匹配工具,它能够根据一定的规则来匹配字符串。正则表达式广泛应用于文本处理、数据抽取、验证等领域,如电子邮件地址验证、搜索引擎、编译器、解释器等

2.常用的匹配规则

模  式描  述
\w匹配字母、数字及下划线
\W匹配不是字母、数字及下划线的字符
\s匹配任意空白字符,等价于 [\t\n\r\f]
\S匹配任意非空字符
\d匹配任意数字,等价于 [0-9]
\D匹配任意非数字的字符
\A匹配字符串开头
\Z匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串
\z匹配字符串结尾,如果存在换行,同时还会匹配换行符
\G匹配最后匹配完成的位置
\n匹配一个换行符
\t匹配一个制表符
^匹配一行字符串的开头
$匹配一行字符串的结尾
.匹配任意字符,除了换行符,当 re.DOTALL 标记被指定时,则可以匹配包括换行符的任意字符
[...]用来表示一组字符,单独列出,比如 [amk] 匹配 a、m 或 k
[^...]不在 [] 中的字符,比如 匹配除了 a、b、c 之外的字符
?匹配 0 个或 1 个前面的正则表达式定义的片段,非贪婪方式
{n}精确匹配 n 个前面的表达式
{n, m}匹配 n 到 m 次由前面正则表达式定义的片段,贪婪方式
a b匹配 a 或 b
()匹配括号内的表达式,也表示一个组
*匹配 0 个或多个表达式
+匹配 1 个或多个表达式

可参考:正则表达式 - 元字符

3.常用工具

开源中国提供的正则表达式测试工具 http://tool.oschina.net/regex/
在这里插入图片描述
举例:

这段文本包含了一个url跟一个电子邮件地址 https://tool.oschina.net/regex/# 460116047@qq.com

用快捷方式匹配 url 跟 电子邮件
在这里插入图片描述

4.match方法

该函数尝试从字符串的开头开始匹配一个正则表达式模式,如果匹配成功,则返回一个匹配对象,否则返回 None
导入python 自有的 re 模块

# public interface
def match(pattern, string, flags=0):
    """Try to apply the pattern at the start of the string, returning
    a Match object, or None if no match was found."""
    return _compile(pattern, flags).match(string)

参数说明:

  • pattern:正则表达式
  • string:要匹配的字符串
  • flags:可选参数,用于控制正则表达式的匹配方式
  • 匹配一个以 hello 开头的字符串
import re

# 
pattern = 'study'
string = 'study python'
result = re.match(pattern, string)
print(result)

返回结果:

<re.Match object; span=(0, 5), match='study'>

5.search方法

该函数用于在字符串中搜索匹配正则表达式的第一个位置,并返回一个包含匹配信息的Match对象。如果没有匹配到,则返回None。

我们把上面代码中的 match 方法修改成 search,再看一下运行结果:

import re

# 
pattern = 'study'
string = 'study python'
result = re.search(pattern, string)
print(result)

6.match与search的区别

它们的主要区别在于匹配的位置不同。

  • re.match :只会从字符串的开头开始匹配,如果在开头没有匹配到,则返回None。
  • re.search :会搜索整个字符串,只要找到第一个匹配项,就会返回一个匹配对象。
import re

pattern = 'study'
string = 'study python'

# 使用re.match进行匹配
result= re.match(pattern, string)

if result:
    print('re.match匹配成功!')
else:
    print('re.match匹配失败!')

# 使用re.search进行匹配
result= re.search(pattern, string)

if result:
    print('re.search匹配成功!')
else:
    print('re.search匹配失败!')

返回结果:

re.match匹配成功!
re.search匹配成功!

在这个示例中,我们定义了一个正则表达式模式study,然后在字符串study python中使用re.matchre.search进行匹配。由于study出现在字符串的开头,因此re.matchre.search都返回了一个匹配对象,表示匹配成功。但是,如果我们将字符串改为python study ,则re.match将返回None,因为study 不在字符串的开头。

7.compile方法

compile:函数是用于将正则表达式编译成一个正则表达式对象的函数。编译后的正则表达式对象可以被多次使用,可以提高程序的效率。

import re

# 编译正则表达式
pattern = re.compile(r'\d+')
str = 'study 2222 python 3333'

# 使用正则表达式对象进行匹配
result = pattern.findall(str)
print(result)

结果:

['2222', '3333']

上面的代码中,我们先使用re.compile()函数将正则表达式编译成一个正则表达式对象,然后使用该对象的findall()方法进行匹配。这样可以提高程序的效率,特别是在需要多次使用同一个正则表达式时。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值