1. 正则表达式概述
正则表达式(Regular Expression,简称regex或regexp)是一种文本匹配模式,在文本中搜索特定模式的字符串。Python中re模块是正则表达式的标准库,它提供了一组函数,可以用来操作正则表达式。
1.1 正则表达式的语法
正则表达式的语法相对来说比较复杂,学习起来需要一些时间。下面是一些常用符号和其对应的含义:
.: 匹配任意一个字符(除了换行符)
*: 匹配前一个字符0次或多次
+: 匹配前一个字符1次或多次
?: 匹配前一个字符0次或一次
|: 指定多个可选模式
(): 指定子模式
[]: 指定字符集合
^: 匹配开头
$: 匹配结尾
1.2 如何使用正则表达式
使用正则表达式需要先导入re模块,并调用其中的函数。其中一些常用函数包括:
re.findall():返回所有匹配的字符串列表
re.search():在给定字符串中搜索第一个匹配项,并返回一个匹配对象
re.match():在给定字符串开头匹配一个模式,并返回匹配对象
re.sub():将给定字符串中的匹配项替换为指定的字符串
2. re模块常用函数
2.1 re.findall()
re.findall()函数返回所有匹配的字符串,返回结果是一个列表。
例如,下面是一个匹配数字的正则表达式,它可以匹配一个字符串中的所有数字:
import re
text = "Hello 123 World 456"
result = re.findall('\d+', text)
print(result)
输出结果为:
['123', '456']
以上代码中的正则表达式“\d+”匹配一个或多个数字。
2.2 re.search()
re.search()函数在给定字符串中搜索第一个匹配项,并返回一个匹配对象。
例如,下面是一个匹配日期的正则表达式,它可以匹配一个字符串中的第一个日期:
import re
text = "Today is 2022-02-25."
result = re.search('\d{4}-\d{2}-\d{2}', text)
print(result.group())
输出结果为:
2022-02-25
以上代码中的正则表达式“\d{4}-\d{2}-\d{2}”匹配日期,其中“\d”匹配数字,“{4}”表示匹配4个数字,“-”表示匹配连接符。
2.3 re.match()
re.match()函数在给定字符串开头匹配一个模式,并返回匹配对象。
例如,下面是一个匹配Email地址的正则表达式,它可以匹配一个字符串中的第一个Email地址:
import re
text = "My Email address is abc123@gmail.com"
result = re.match('[\w]+@[\w]+\.com', text)
print(result.group())
输出结果为:
abc123@gmail.com
以上代码中的正则表达式“[\w]+@[\w]+\.com”匹配Email地址,其中“[\w]”匹配任意字符或数字,“+”表示匹配前面的字符或数字一次或多次,“@”和“.”需要转义符号“\”。
2.4 re.sub()
re.sub()函数可以将给定字符串中的匹配项替换为指定的字符串。
例如,下面是一个替换字符串中所有数字的正则表达式:
import re
text = "Hello 123 World 456"
result = re.sub('\d+', '', text)
print(result)
输出结果为:
Hello World
以上代码中的正则表达式“\d+”匹配一个或多个数字,第二个参数为要替换的字符串,这里为空字符串。
3. 实例应用
3.1 检查字符串是否符合要求
可以使用正则表达式来检查一个字符串是否符合要求。例如,下面是一个检查Email地址是否合法的例子:
import re
def check_email(email):
pattern = r"^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$"
if re.match(pattern, email):
return True
else:
return False
email1 = "abc123@gmail.com"
email2 = "abc123#gmail.com"
print(check_email(email1)) # 输出True
print(check_email(email2)) # 输出False
以上代码中的正则表达式“^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$”匹配Email地址,其中“^\w+”匹配以字母、数字或下划线开头的字符串,“@[a-zA-Z_]+?”匹配目标字符的“@”以及后面的一或多个大小写字母和下划线,“\.[a-zA-Z]{2,3}$”匹配以大小写字母结尾的域名,例如.com或.net等。
3.2 寻找指定模式
可以使用正则表达式来寻找一个字符串中符合特定模式的子串。例如,下面是一个寻找Twitter用户名的例子:
import re
text = "Follow me on Twitter @Alex123"
result = re.search("@([a-zA-Z0-9_]+)", text)
print(result.group(1))
输出结果为:
Alex123
以上代码中的正则表达式“@([a-zA-Z0-9_]+)”匹配以@开头的Twitter用户名,其中“([a-zA-Z0-9_]+)”匹配任意字母、数字或下划线。
3.3 替换字符串中的特定模式
可以使用正则表达式来替换一个字符串中的特定模式。例如,下面是一个替换字符串中的美元符号为人民币符号的例子:
import re
text = "I have $100 in my wallet."
result = re.sub('\$', '¥', text)
print(result)
输出结果为:
I have ¥100 in my wallet.
以上代码中的正则表达式“\$”匹配美元符号,第二个参数为要替换的字符串,这里为人民币符号“¥”。
4. 总结
本文介绍了Python 3.x中如何使用re模块进行正则表达式匹配,包括正则表达式的语法、re模块常用函数的介绍以及实例应用。学习和掌握正则表达式的使用可以大大提高代码编写的效率,希望本文对大家有所帮助。