目录

一.正则表达式介绍

1.正则表达式的应用场景

2.正则表达式的本质

3.正则表达式的优势

4.匹配字符串

①match()函数

②search()函数

③findall()函数

5.正则表达式

①表示字符范围

②表示字符出现的次数

③表示同一类字符

6.贪婪模式和非贪婪模式

7.或和组

8.sub()方法和compile方法

①sub(参数一,参数二,参数三)方法

②compile()方法


一.正则表达式介绍

1.正则表达式的应用场景

正则表达式在爬虫技术中使用较多,而爬虫技术是为人工智能服务的,主要用于从网页中获取数据。
学习爬虫需要掌握正则表达式,因为它是处理字符串数据的重要工具。

Python 中通过 re 库实现正则表达式功能,需先导入库。


2.正则表达式的本质

正则表达式是一种表达式语句,类似于数值操作中的表达式(如 A + B - 3)。
它的主要作用是对字符串类型的数据进行操作,例如从字符串中筛选出满足特定条件的信息。
正则表达式能够更高效地处理复杂的数据提取需求,尤其是面对网页中千奇百怪的数据格式时。


3.正则表达式的优势

相比传统方法,正则表达式能够简化复杂信息的提取过程,适用于更广泛的数据处理场景。

4.匹配字符串

匹配字符串表示从字符串中筛选出满足条件(特殊的表达式)的信息,介绍三种方法,分别是re库中的match()函数,search()函数和findall()函数

①match()函数

match(参数一,参数二)

功能:从参数一字符串起始位置匹配参数二指定规则,若匹配成功返回结果,否则返回 None

import re
message = "张三李四王五赵六"
result = re.match("张三", message)  # 匹配成功,返回张三及位置(0-2)

特点:
必须从字符串开头匹配,否则失败(如 re.match("三", message) 返回 None)。


②search()函数

功能:在参数一字符串中搜索第一个满足参数二规则的子串,不要求从起始位置匹配,只返回第一个匹配成功的

result = re.search("王五", message)  # 返回第一个"王五"及位置(4,6)

特点:
仅返回第一个匹配结果,支持任意位置匹配。

③findall()函数

功能::在参数一字符串中搜索满足参数二规则的子串,不要求从起始位置匹配,可以返回多个成功匹配的信息

import re
message = '张三,李四,王五,赵六,王五'
result=re.findall('王五',message)
print(result)#['王五','王五']

findall()并不返回匹配的位置,只返回匹配的全部内容

5.正则表达式

①表示字符范围

[xyz]:字符集合,匹配所包含的任意一个字符,例如[abc]可以匹配plain中的a

[a-z]:字符范围,匹配范围内的任意字符,例如[a-z]可以匹配a到z范围的任意小写字母

②表示字符出现的次数

星号 *:匹配前导子表达式零次或多次(如 ZO* 可匹配 ZZOZOO

加号 +:匹配前导子表达式一次或多次(如 [a-z]+[0-9] 要求字母至少出现一次)。

问号 ?:匹配前导子表达式零次或一次(如 [a-z]?[0-9] 允许字母出现零次或一次)。

尖号 ^:匹配行首(如 ^1 确保手机号以 1 开头)。

美元符 $:匹配行尾(如 [0-9]{10}$ 确保结尾为 10 位数字)。

花括号{n}:匹配n次,例如,“o{2}”不能匹配“Bob"中的o,但是能匹配到”food“中的oo

{n,}:至少匹配n次

{n,m}:最少匹配n次,最多匹配m次

例如:验证手机号码,:手机号匹配规则需以 $ 结尾,若未严格限定行尾匹配,可能导致验证失败。

import re
a=input("请输入你的手机号码:")
result=re.findall('^1[0-9]{10}$',a)
print(result)

网站用户由字母(大小写都可),数字和下划线组成,数字不能开头,用户长度大于8,


import re
a=input("请输入你的用户名:")
result=re.findall('^[a-zA-z_][a-zA-z0-9_]{7,}$',a)
print(result)

③表示同一类字符

1.特殊字符匹配

 \d:   匹配一个数字字符,(等价于[0-9]

\D:匹配一个非数字字符(等价于[^0-9]

\s:匹配任何不可见字符(如空格、制表符、换页符等)。

\S: 匹配任何可见字符

\w:匹配包括下划线的任何单词字符(包括字母、数字、下划线),等价于([a-zA-z0-9_])

 \W: 匹配不包括下划线非单词字符,等价于([^a-zA-z0-9_])

. :匹配除了”\n“和”\r“之外的任何单个字符

2.边界与符号匹配

\B:匹配非单词边界(如单词中间部分)。

\b:匹配单词边界(如空格分隔的单词边缘)。

\f\n\r\t\v:分别匹配换页符、换行符、回车符、制表符、垂直制表符。

3.重复匹配

+:匹配前一个子表达式一次或多次(贪婪模式)。

?:将匹配模式转为非贪婪模式(匹配最少字符)。

6.贪婪模式和非贪婪模式

贪婪模式和非贪婪模式就是指是否匹配更多内容,默认都是贪婪模式

贪婪模式(默认):\d+ 匹配尽可能多的数字(如cc771中的771)。

非贪婪模式:\d+? 匹配最少数字(如cc771中的7)。

7.或和组

或(|):匹配多个条件之一,如(\w+EV|\w+RY) 筛选以EV或RY结尾的单词。
组(()):将表达式分组并保存匹配内容,如(.\+) 匹配任意字符序列并存储。可以使用组的形式获取组中的内容

import re 
message='verb very never every'
result=re.findall('e(.+)(.)r',message)
print(result) 
#[('rb very never ev', 'e')]

8.sub()方法和compile方法

①sub(参数一,参数二,参数三)方法

包含三个参数,将参数三中所有匹配参数一的字符替换为参数二

②compile()方法

创建一个正则表达式对象,可直接调用对象方法(如 findall)操作字符串。与直接使用 re 模块功能类似,区别在于对象化调用。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐