1. 什么是正则表达式
正则表达式(Regular Expression)是用来处理字符串的一种工具,它可以实现字符串的匹配、查找、替换、分割等功能。
正则表达式是一种文本模式,包括普通字符和特殊字符(元字符)。特殊字符有特殊的含义,能够匹配字符串的特定部分。
2. Python中正则表达式模块——re
Python提供了re模块,可以用来支持正则表达式。re模块中提供了很多函数,包括:re.match(), re.search(), re.findall(), re.sub()等。
在使用re模块前,需要导入该模块。
import re
2.1 re.match()
re.match()函数用于匹配字符串的开头。如果字符串开头的字符与正则表达式相符,则匹配成功,否则匹配失败。
如果正则表达式中使用了^,就表示字符串的开头;re.match()函数就会尝试去匹配字符串的开头,如匹配成功,则返回一个匹配对象;否则返回None。
下面是一个例子:
import re
string = "hello, world!"
pattern = r"^hello"
result = re.match(pattern, string)
if result:
print("匹配成功")
else:
print("匹配失败")
输出结果为:
匹配成功
2.2 re.search()
re.search()函数用于在整个字符串中查找第一个匹配项。如果匹配成功,则返回一个匹配对象;否则返回None。
如果正则表达式中没有使用^,就表示在整个字符串中查找匹配项。
下面是一个例子:
import re
string = "hello, world! Hello, Python."
pattern = r"Hello"
result = re.search(pattern, string)
if result:
print("匹配成功")
else:
print("匹配失败")
输出结果为:
匹配成功
2.3 re.findall()
re.findall()函数用于在整个字符串中查找所有匹配项,并返回一个包含所有匹配项的列表。
下面是一个例子:
import re
string = "hello, world! Hello, Python."
pattern = r"[a-z]+"
result = re.findall(pattern, string)
print(result)
输出结果为:
['hello', 'world', 'ello', 'ython']
2.4 re.sub()
re.sub()函数用于替换字符串中的匹配项。
下面是一个例子:
import re
string = "hello, world! Hello, Python."
pattern = r"[a-zA-z]+"
result = re.sub(pattern, "Python", string)
print(result)
输出结果为:
Python, Python! Python, Python.
3. 正则表达式语法
正则表达式中有很多特殊字符和语法,下面列出一些常见的:
字符 | 描述 |
---|---|
. | 匹配任何单个字符,除了换行符。 |
^ | 匹配字符串的开头。 |
$ | 匹配字符串的结尾。 |
* | 匹配前面的字符出现0次或多次。 |
+ | 匹配前面的字符出现1次或多次。 |
? | 匹配前面的字符出现0次或1次。 |
{n} | 匹配前面的字符出现n次。 |
{n,} | 匹配前面的字符至少出现n次。 |
{n,m} | 匹配前面的字符出现n到m次。 |
[] | 匹配方括号中的任意一个字符。 |
(|) | 匹配括号中的任意一项,多个项用|分隔。 |
4. 案例
4.1 匹配手机号码
下面的例子演示如何用正则表达式匹配手机号码。
import re
phone_number = "13456789012"
pattern = r"^1[3|4|5|7|8][0-9]{9}$"
result = re.match(pattern, phone_number)
if result:
print("是合法的手机号码")
else:
print("不是合法的手机号码")
输出结果为:
是合法的手机号码
4.2 去掉字符串中的HTML标签
下面的例子演示如何用正则表达式去掉字符串中的HTML标签。
import re
html = "这是一个带有 空格和<b>加粗</b>标签的<br />html文本。"
pattern = r"<.*?>"
result = re.sub(pattern, "", html)
print(result)
输出结果为:
这是一个带有 空格和加粗标签的html文本。
4.3 匹配邮件地址
下面的例子演示如何用正则表达式匹配邮件地址。
import re
email = "user@example.com"
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
result = re.match(pattern, email)
if result:
print("是合法的邮件地址")
else:
print("不是合法的邮件地址")
输出结果为:
是合法的邮件地址
总结
本文介绍了Python中正则表达式模块re的基本用法、常见语法以及应用案例,正则表达式可以让我们在处理字符串时更加灵活、高效。