利用Python正则表达式进行字符串匹配和替换
更新时间:2023-07-10什么是正则表达式
正则表达式,又称规则表达式,是一种用来描述特定模式的文本字符串。Python中的正则表达式是通过re模块实现的。使用正则表达式可以进行字符串的匹配和替换,非常方便实用。
import re
line = 'hello world'
matchObj = re.match( r'(.*) (.*)', line, re.M|re.I)
if matchObj:
print("matchObj.group() : ", matchObj.group())
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(2) : ", matchObj.group(2))
else:
print("No match!!")
正则表达式的匹配模式
正则表达式有很多种匹配模式,常用的有以下几种:
- ^ 匹配字符串的开头
- $ 匹配字符串的末尾
- . 匹配任意字符
- * 匹配零个或多个前面的字符
- + 匹配一个或多个前面的字符
- ? 匹配零个或一个前面的字符
- {n} n是非负整数,匹配前面的字符恰好n次
- {n,} n是非负整数,匹配前面的字符至少n次
- {n,m} n和m是非负整数,匹配前面的字符至少n次,至多m次
- [] 匹配括号内的任意一个字符
- | 匹配从左到右的任意一个表达式
- () 将表达式分组,后面可以使用\1, \2, \3等来引用分组
import re
phone = "2004-959-559 # 这是一个电话号码"
# 删除注释
num = re.sub(r'#.*$', "", phone)
print("电话号码是: ", num)
# 移除非数字的内容
num = re.sub(r'\D', "", phone)
print("电话号码是 : ", num)
正则表达式的分组
为了更好地应用正则表达式进行字符串匹配和替换,我们可以使用分组功能。分组指的是用一对圆括号将一个或多个表达式括起来,分成一个组,从而方便后面使用\1, \2, \3等来引用分组。
import re
# 匹配电话号码
phone = "2004-959-559 # 这是一个电话号码"
# 匹配电话号码的正则表达式
pattern = r'(\d{4})-(\d{3})-(\d{3})'
# 搜索电话号码
matchObj = re.search(pattern, phone)
# 打印搜索出来的电话号码
if matchObj:
print("matchObj.group() : ", matchObj.group())
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(2) : ", matchObj.group(2))
print("matchObj.group(3) : ", matchObj.group(3))
else:
print("No match!!")
正则表达式的应用场景
正则表达式在程序开发中应用非常广泛,比如说对于从网络中爬取到的HTML网页,我们通常需要将其中的一些内容提取出来并保存下来。这个时候就可以使用Python的正则表达式进行字符串的匹配和替换。
此外,正则表达式还可以应用于输入验证,比如验证一个邮箱、手机号或者密码是否符合一定规则,从而保证输入的正确性和安全性。
import re
# 验证邮箱格式是否正确
email = "example@mail.com"
pattern = r'^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}$'
if re.match(pattern, email):
print("邮箱格式正确")
else:
print("邮箱格式错误")