一、正则表达式的基本元素
正则表达式是由普通字符(如字母、数字、空格和标点等)和特殊字符(元字符)组成的字符串。
元字符是正则表达式中具有特殊意义的字符,例如: . ^ $ * + ? { } [ ] \ | ()。其中有些元字符是单字母,如 .,表示匹配除换行符外的任何单个字符。而有些元字符是多个字符组成的,如 {n,m},表示匹配前一个字符n到m次。在正则表达式中,元字符通常用来描述模式的某些特性,例如描述一个字符串是由哪些字符组成的。
import re
pattern = "abc" # 定义正则表达式模式
string = "hello, abc, match me!" # 定义需要匹配的字符串
result = re.match(pattern, string) # 匹配字符串
print(result)
运行上面的代码会输出一个Match对象,表示匹配成功。其中,pattern是正则表达式模式,string是需要匹配的字符串,re.match(pattern, string)函数返回一个Match对象,表示匹配成功。
二、正则表达式的常见操作
1、re.match函数
re.match函数用来尝试从字符串的起始位置匹配一个模式。如果匹配成功,则返回一个Match对象,否则返回None。
import re
pattern = "abc" # 定义正则表达式模式
string = "hello, abc, match me!" # 定义需要匹配的字符串
result = re.match(pattern, string) # 匹配字符串
print(result)
运行上面的代码会输出一个Match对象,表示匹配成功。
2、re.search函数
re.search函数用来在字符串中搜索匹配正则表达式的第一个位置,如果匹配成功,则返回一个Match对象,否则返回None。
import re
pattern = "abc" # 定义正则表达式模式
string = "hello, abc, match me!" # 定义需要匹配的字符串
result = re.search(pattern, string) # 搜索字符串
print(result)
运行上面的代码会输出一个Match对象,表示匹配成功。
3、re.findall函数
re.findall函数用来在字符串中搜索匹配正则表达式的所有位置,返回一个列表。
import re
pattern = "\d+" # 定义正则表达式模式,匹配连续的数字
string = "hello, 1234, 5678, match me!" # 定义需要匹配的字符串
result = re.findall(pattern, string) # 查找字符串
print(result)
运行上面的代码会返回一个列表,其中包含所有匹配的数字。
三、正则表达式实战
1、匹配Email地址
下面的代码定义了一个正则表达式模式,用于匹配Email地址。其中,“\w”表示匹配任意一个字母、数字或下划线,“+”表示匹配前面的字符1次或多次,“.”表示匹配任意一个字符。
import re
pattern = "\w+@\w+\.\w+" # 定义正则表达式模式,匹配Email地址
string = "My Email address is yourname@domain.com" # 定义需要匹配的字符串
result = re.search(pattern, string) # 搜索字符串
if result:
print(result.group())
运行上面的代码会输出匹配到的Email地址“yourname@domain.com”。
2、匹配手机号码
下面的代码定义了一个正则表达式模式,用于匹配手机号码。其中,以1开头的11位数字。不难发现,此处使用了Python语言的字符串格式化技术,将正则表达式模式和需要匹配的字符串结合在一起。
import re
pattern = "^1[0-9]{10}$" # 定义正则表达式模式,匹配手机号码
string = "My phone number is 13888888888" # 定义需要匹配的字符串
result = re.search(pattern, string) # 搜索字符串
if result:
print(result.group())
运行上面的代码会输出匹配到的手机号码“13888888888”。
3、匹配IP地址
下面的代码定义了一个正则表达式模式,用于匹配IP地址。其中,每个组成IP地址的数字为0到255之间的整数。
import re
pattern = "(25[0-5]|2[0-4]\d|[01]?\d\d?)(\.(25[0-5]|2[0-4]\d|[01]?\d\d?)){3}" # 定义正则表达式模式,匹配IP地址
string = "My IP address is 192.168.1.1" # 定义需要匹配的字符串
result = re.search(pattern, string) # 搜索字符串
if result:
print(result.group())
运行上面的代码会输出匹配到的IP地址“192.168.1.1”。
4、替换文本中的字符串
下面的代码定义了一个正则表达式模式,用于匹配字符串中的“Python”字符串。使用re.sub函数将所有“Python”替换为“Java”。
import re
pattern = "Python" # 定义正则表达式模式,匹配字符串中的“Python”
string = "I love Python, I am learning Python" # 定义需要匹配的字符串
new_string = re.sub(pattern, "Java", string) # 将字符串中所有的“Python”替换为“Java”
print(new_string)
运行上面的代码会输出替换后的字符串:“I love Java, I am learning Java”。
5、提取HTML中的链接
下面的代码定义了一个正则表达式模式,用于提取HTML中的链接。使用re.findall函数查找HTML中所有的链接。
import re
pattern = '(.*?)' # 定义正则表达式模式,匹配HTML中的链接
html = '百度一下谷歌一下' # 定义需要匹配的字符串
result = re.findall(pattern, html) # 查找字符串中所有的链接
for link, name in result:
print(link, name)
运行上面的代码会输出HTML中两个链接的URL和显示的文字。
通过上面的例子,我们可以看到正则表达式在Python中的应用非常广泛,并且能够帮助我们快速地对文本进行匹配和搜索。以上只是一个简单的入门介绍,正则表达式的表达能力非常强大,如果想深入学习正则表达式的相关知识,在此推荐一份正则表达式的学习资料,地址为https://www.runoob.com/regexp/regexp-tutorial.html,希望对大家有所帮助。