正则表达式 %
正则表达式(Regular Expression)是一种用于匹配文本的模式,它可以帮助我们快速定位到我们想要的字符串。在数据处理、文本分析和计算机编程等领域都有广泛的应用。
基本语法
正则表达式通常由普通字符和特殊字符组成。 普通字符包括大小写字母、数字和一些标点符号。特殊字符是具有特殊含义的字符。
使用正则表达式通常需要遵循一些约定:
- 在正则表达式中,除了普通字符和特殊字符外,其他字符都是字面意思,即在匹配时按照字面意思处理。
- 在正则表达式中,如果要匹配普通字符本身,需要给其加上转义字符 \。
- 在正则表达式中,大写字母通常表示取反。例:[^0-9]匹配不是数字的字符。
下面是一些基本特殊字符及其含义:
符号 | 含义 |
---|---|
. | 匹配任意单个字符 |
\d | 数字,等价于[0-9] |
\D | 非数字,等价于[^0-9] |
\s | 空白字符,包括空格、制表符、换行符等 |
\S | 非空白字符 |
\w | 单词字符,包括字母、数字和下划线 |
\W | 非单词字符 |
正则表达式的应用
匹配手机号码
用正则表达式匹配手机号码是比较常见的需求。在中国,手机号码一般是11位数字,由3段数字组成:前3位代表运营商,4-7位代表省份,其余位数是流水号。以13、15、18、17开头的数字是比较常见的手机号码。
使用正则表达式可以轻松地匹配手机号码:
import re
phone_numbers = [
'12345678901',
'13912345678',
'14788888888',
'15012345678',
'18712345678',
'19812345678'
]
pattern = r'^1(3|5|7|8)\d{9}$'
for phone in phone_numbers:
res = re.match(pattern, phone)
if res is not None:
print(f'{phone}:匹配成功')
else:
print(f'{phone}:匹配失败')
输出:
12345678901:匹配失败
13912345678:匹配成功
14788888888:匹配失败
15012345678:匹配成功
18712345678:匹配成功
19812345678:匹配失败
匹配邮箱地址
同样地,正则表达式也可以用于匹配邮箱地址。邮箱地址通常由用户名、@符号和域名组成。
import re
email_addresses = [
'justin@mail.com',
'123abc@qq.com',
'_abc123@163.com',
'@gmail.com',
'abc@abc'
]
pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
for email in email_addresses:
res = re.match(pattern, email)
if res is not None:
print(f'{email}:匹配成功')
else:
print(f'{email}:匹配失败')
输出:
justin@mail.com:匹配成功
123abc@qq.com:匹配成功
_abc123@163.com:匹配成功
@gmail.com:匹配失败
abc@abc:匹配失败
常用函数
Python中的re
模块提供了一些函数来支持正则表达式的应用。下面是一些常用的函数:
re.match()
re.match()函数用于匹配字符串的开始部分。如果字符串的开始部分能够匹配到正则表达式,返回匹配对象,否则返回None
。
import re
pattern = r'hello'
string = 'hello world'
res = re.match(pattern, string)
if res is not None:
print(res.group()) # 输出匹配结果
else:
print('未匹配到结果')
输出:
hello
re.search()
re.search()函数用于在字符串中查找第一个能够匹配到正则表达式的子串。如果找到了,返回匹配对象,否则返回None
。
import re
pattern = r'world'
string = 'hello world'
res = re.search(pattern, string)
if res is not None:
print(res.group()) # 输出匹配结果
else:
print('未匹配到结果')
输出:
world
re.findall()
re.findall()函数用于查找字符串中所有能够匹配到正则表达式的子串,并以列表的形式返回所有匹配结果。
import re
pattern = r'\d+'
string = '2 apples, 3 oranges, 4 bananas'
res = re.findall(pattern, string)
print(res) # 输出匹配结果
输出:
['2', '3', '4']
re.sub()
re.sub()函数用于在字符串中将能够匹配到正则表达式的所有子串替换为指定字符串。
import re
pattern = r'\d+'
string = '2 apples, 3 oranges, 4 bananas'
new_string = re.sub(pattern, '5', string)
print(new_string) # 输出替换后的字符串
输出:
5 apples, 5 oranges, 5 bananas
结论
正则表达式是一种非常强大的文本匹配工具,可以大大提高处理文本数据的效率和精度。在Python中,我们可以使用re
模块来支持正则表达式的应用。在实际工作中,我们可以根据需求选择合适的函数和正则表达式来实现目标功能。