【目录】
1.正则表达式
2.正则表达式的应用
3.正则表达式应用示例
3.1 电子邮件验证
3.2 手机号码验证
3.3 网址验证
3.4 IP地址验证
4.re模块
5.re模块导入
6.正则表达式的构成
7.参考文档
欢迎小伙伴们加我微信xyz77520520
【正文】
学习时间15分钟。
1.正则表达式
RegEx[ˈreɡeks]:正则表达式。
正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE)。
正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
2.正则表达式的应用
正则表达式(RegEx)是一种文本模式描述的语法,用于在文本中查找、替换、匹配和解析
具有特定规律
的字符串。
数据验证:
正则表达式能够验证用户输入是否符合特定的格式要求,例如电子邮件地址、手机号码等。 通过正则表达式,可以确保用户输入的数据准确、一致,并符合预定义的规则,从而维护数据的完整性。
数据提取:
从大量文本中提取特定信息,如抓取网页中的链接或提取日志文件中的关键信息。 在数据分析中,正则表达式用于从原始数据中提取有用的信息,如从日志文件中提取错误信息等。
日志解析:
正则表达式能够处理日志文件,从中提取关键数据,如错误消息、用户活动等。 通过正则表达式,可以快速定位日志中的问题,提高问题诊断的效率。
搜索替换:
在文本编辑器、编程语言或命令行中,使用正则表达式进行字符串匹配和替换操作。 正则表达式可以快速找到符合特定模式的字符串,并进行相应的替换,提高文本处理的效率。
数据清洗:
在处理大量文本数据时,使用正则表达式进行筛选、过滤和清理。 删除无关内容、替换错误数据或者格式化文本等,使数据更加干净和可用。
URL路由:
在Web开发中,使用正则表达式定义URL路由规则和进行路由匹配。 匹配不同的URL路径,并将请求转发给相应的处理程序,提高Web应用的灵活性和可扩展性。
3.正则表达式应用示例
下面的代码仅做了解,不用深究,后面的课程会有详细讲解。
3.1 电子邮件验证
目标:验证电子邮件地址是否符合标准格式。
【代码示例】
import re # 导入正则表达式模块
# 定义一个电子邮件地址字符串
email = "example@example.com"
# 定义一个用于匹配电子邮件地址的正则表达式模式
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
# 使用re.match()函数检查电子邮件地址是否与模式匹配
if re.match(pattern, email):
print("Valid email") # 如果匹配,输出“Valid email”
else:
print("Invalid email") # 如果不匹配,输出“Invalid email”
3.2 手机号码验证
目标:验证手机号码是否符合特定国家或地区的格式。
【代码示例】
# 导入正则表达式模块
import re
# 定义一个电话号码字符串
phone_number = "+1 (555) 123-4567"
# 定义一个匹配电话号码的正则表达式模式
pattern = r'^\+\d{1,3} \(\d{3}\) \d{3}-\d{4}$'
# 使用re.match()函数检查电话号码是否与模式匹配
if re.match(pattern, phone_number):
# 如果匹配,输出“Valid phone number”
print("Valid phone number")
else:
# 如果不匹配,输出“Invalid phone number”
print("Invalid phone number")
3.3 网址验证
目标:验证URL是否有效。
【代码示例】
# 导入正则表达式模块
import re
# 定义一个网址字符串
url = "https://www.example.com"
# 定义一个匹配网址的正则表达式模式
pattern = r'^(http|https)://[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
# 使用re.match()函数检查网址是否与模式匹配
if re.match(pattern, url):
# 如果匹配,输出“Valid URL”
print("Valid URL")
else:
# 如果不匹配,输出“Invalid URL”
print("Invalid URL")
3.4 IP地址验证
目标:验证IPv4地址的有效性。
【代码示例】
# 导入正则表达式模块
import re
# 定义一个IP地址字符串
ip_address = "192.168.1.1"
# 定义一个匹配IP地址的正则表达式模式
pattern = (r'^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'
r'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'
r'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'
r'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')
# 使用re.match()函数检查IP地址是否与模式匹配
if re.match(pattern, ip_address):
print("Valid IP address") # 如果匹配,输出“Valid IP address”
else:
print("Invalid IP address") # 如果不匹配,输出“Invalid IP address”
4.re模块
Python 提供了re模块用于实现正则表达式的操作。在编程中,可以使用re模块提供的方法,如match( )、findall( )等进行字符串处理。
知识拓展:使用dir()函数查询re模块的函数方法个数(仅做了解)。
【代码示例】
import re # 导入re模块
import inspect # 导入inspect模块
attributes_and_methods = dir(re) # 获取re模块中的所有属性和方法
functions = [] # 创建一个空列表来存储函数名称
for item in attributes_and_methods:
if inspect.isfunction(getattr(re, item)): # 检查是否为函数
functions.append(item) # 如果是函数,则添加到列表中
num_methods = len(functions) # 计算方法的个数
print("re模块提供了", num_methods, "个方法。")
print("re模块的函数分别是:")
for function in functions:
print(function)
【终端输出】
re模块提供了 16 个方法。
re模块的函数分别是:
_compile
_expand
_pickle
_subx
compile
escape
findall
finditer
fullmatch
match
purge
search
split
sub
subn
template
5.re模块导入
re模块在使用时,需要先用import语句导入。
【代码示例】
import re
6.正则表达式的构成
字符:普通的字符,如
a
、b
、c
等,用于匹配对应的字符。字符类:使用方括号
[]
定义的一组字符,用于匹配其中的任意一个字符。例如,[abc]
匹配 "a"、"b" 或 "c"。量词:用于指定前面的字符或字符类出现的次数。常见的量词有
*
(零次或多次)、+
(一次或多次)、?
(零次或一次)、{n}
(精确重复 n 次)和{n,m}
(重复 n 到 m 次)。选择符:通过竖线
|
分隔不同的模式,表示匹配其中任意一个模式。例如,a|b
匹配 "a" 或 "b"。分组:通过圆括号
()
将多个字符组合在一起,形成一个整体。这在需要对整个组应用量词时非常有用。例如,(ab)+
匹配一个或多个连续的 "ab"。锚定符:用于指定匹配的位置。例如,
^
表示字符串的开始,$
表示字符串的结束,\b
表示单词边界等。特殊字符:一些具有特殊含义的字符,如
.
表示任意单个字符,*
表示前面的字符可以出现零次或多次等。转义字符:通过反斜杠
\
转义特殊字符,使其失去特殊含义并作为普通字符进行匹配。例如,\.
匹配点号 "."。注释:在正则表达式中,可以使用
#
添加注释,以便对正则表达式进行解释和说明。模式修饰符:在正则表达式的末尾,可以添加模式修饰符来改变匹配的行为。例如,
i
表示忽略大小写,g
表示全局匹配,m
表示多行匹配等。
7.参考文档
re模块官方文档链接:https://docs.python.org/3/library/re.html