正则表达式是一种强大的文本处理工具,它允许用户通过定义模式来匹配、查找、替换字符串中的特定内容。Python 内置了对正则表达式的支持,主要通过 re 模块实现。
正则表达式的用途
正则表达式广泛应用于文本处理领域,例如:
- 搜索和替换:在大量文本中查找并替换特定模式的文本。
- 数据验证:确保输入的数据符合预期格式。
- 解析文本:从复杂的文本中提取有用的信息。
- 数据清洗:清理文本数据,使其更适合分析或处理。
re 模块的基本用法
导入模块
使用正则表达式前,需要先导入 Python 的 re 模块:
import re
常见函数
re.search()
re.search() 函数用于在整个字符串中搜索一个匹配项,并返回一个匹配对象。如果未找到匹配项,则返回 None。
// www.javascriptcn.com code example
pattern = r'abc'
string = 'defabcghi'
match = re.search(pattern, string)
if match:
print("找到了匹配项")
else:
print("没有找到匹配项")re.match()
re.match() 函数用于从字符串的起始位置开始匹配,如果起始位置不符合正则表达式,则匹配失败。
// www.javascriptcn.com code example
pattern = r'^abc'
string = 'abcghi'
match = re.match(pattern, string)
if match:
print("找到了匹配项")
else:
print("没有找到匹配项")re.findall()
re.findall() 函数用于查找字符串中所有匹配的子串,并将它们作为一个列表返回。
pattern = r'\d+' string = 'abc123ghi456jkl' matches = re.findall(pattern, string) print(matches) # 输出: ['123', '456']
re.sub()
re.sub() 函数用于替换字符串中所有匹配正则表达式的子串。
pattern = r'\d+' replacement = '数字' string = 'abc123ghi456jkl' new_string = re.sub(pattern, replacement, string) print(new_string) # 输出: abc数字ghi数字jkl
正则表达式元字符
正则表达式由普通字符和特殊字符(也称为元字符)组成。元字符具有特殊的含义,用于定义匹配规则。
普通字符
普通字符直接匹配它们自身。
pattern = r'abc' string = 'abcghi' match = re.search(pattern, string) print(match.group()) # 输出: abc
特殊字符
特殊字符具有特殊含义,需要转义才能匹配其本身。
- . 匹配除换行符以外的任何单个字符。
- * 匹配前面的子表达式零次或多次。
- + 匹配前面的子表达式一次或多次。
- ? 匹配前面的子表达式零次或一次。
- {} 定义重复次数。
- [] 定义一个字符类。
- () 定义一个分组。
- | 用于分隔两个子表达式,表示“或”的关系。
- ^ 表示行的开头。
- $ 表示行的结束。
- \w 匹配字母数字及下划线。
- \W 匹配非字母数字及下划线。
- \s 匹配任何空白字符。
- \S 匹配任何非空白字符。
pattern = r'a.c' string = 'abcghi' match = re.search(pattern, string) print(match.group()) # 输出: abc
分组与捕获
通过圆括号 () 可以将匹配的子表达式分组,分组后的表达式可以被单独访问。
pattern = r'(abc)(def)'
string = 'abcdefghi'
match = re.search(pattern, string)
if match:
print(match.group(0)) # 输出: abcdef
print(match.group(1)) # 输出: abc
print(match.group(2)) # 输出: def预编译正则表达式
为了提高效率,可以使用 re.compile() 方法预编译正则表达式。
pattern = re.compile(r'\d+') string = 'abc123ghi456jkl' matches = pattern.findall(string) print(matches) # 输出: ['123', '456']
正则表达式的应用实例
验证邮箱地址
import re
def is_valid_email(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return re.match(pattern, email) is not None
email = 'example@example.com'
print(is_valid_email(email)) # 输出: True提取网页链接
// www.javascriptcn.com code example
import re
html_content = '<a href="https://www.example.com">Example</a>'
pattern = r'<a\s+href="([^"]+)">'
match = re.search(pattern, html_content)
if match:
url = match.group(1)
print(url) # 输出: https://www.example.com通过以上介绍,我们可以看到正则表达式是处理文本的强大工具。理解并掌握这些基本概念和方法,能够帮助我们更高效地处理各种文本相关的任务。