正则表达式是一种强大的文本处理工具,它允许用户通过定义模式来匹配、查找、替换字符串中的特定内容。Python 内置了对正则表达式的支持,主要通过 re
模块实现。
正则表达式的用途
正则表达式广泛应用于文本处理领域,例如:
- 搜索和替换:在大量文本中查找并替换特定模式的文本。
- 数据验证:确保输入的数据符合预期格式。
- 解析文本:从复杂的文本中提取有用的信息。
- 数据清洗:清理文本数据,使其更适合分析或处理。
re 模块的基本用法
导入模块
使用正则表达式前,需要先导入 Python 的 re
模块:
import re
常见函数
re.search()
re.search()
函数用于在整个字符串中搜索一个匹配项,并返回一个匹配对象。如果未找到匹配项,则返回 None
。
-- -------------------- ---- ------- ------- - ------ ------ - ----------- ----- - ------------------ ------- -- ------ --------------- ----- ----------------
re.match()
re.match()
函数用于从字符串的起始位置开始匹配,如果起始位置不符合正则表达式,则匹配失败。
-- -------------------- ---- ------- ------- - ------- ------ - -------- ----- - ----------------- ------- -- ------ --------------- ----- ----------------
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
提取网页链接
-- -------------------- ---- ------- ------ -- ------------ - --- ------------------------------------------- ------- - ----------------------- ----- - ------------------ ------------- -- ------ --- - -------------- ---------- - --- -----------------------
通过以上介绍,我们可以看到正则表达式是处理文本的强大工具。理解并掌握这些基本概念和方法,能够帮助我们更高效地处理各种文本相关的任务。