引言
正则表达式(Regular Expression,简称 regex 或 regexp)是Python中处理文本的强大工具之一。它允许开发者通过定义一系列规则来搜索、匹配、替换和验证文本。熟练掌握正则表达式的关键符号,将大大提高文本处理的效率和质量。本文将详细介绍Python正则表达式中的关键符号及其应用。
第一部分:正则表达式基础知识
1.1 常用符号
.
:匹配任意单个字符(除了换行符)。^
:匹配字符串的开头。$
:匹配字符串的结尾。*
:匹配前面的字符零次或多次。+
:匹配前面的字符一次或多次。?
:匹配前面的字符零次或一次(非贪婪模式)。{n}
:匹配前面的字符n次。{n,}
:匹配前面的字符至少n次。{n,m}
:匹配前面的字符至少n次,但不超过m次。[abc]
:匹配a、b或c中的任意一个字符。[^abc]
:匹配除了a、b、c之外的任意字符。|
:表示“或”操作。\d
:匹配任意数字,相当于[0-9]
。\D
:匹配任意非数字字符。\w
:匹配字母、数字或下划线,相当于[a-zA-Z0-9_]
。\W
:匹配任意非字母、数字或下划线字符。
1.2 示例
import re
# 匹配任意单个字符
print(re.findall(r'.', 'abcdef')) # 输出: ['a', 'b', 'c', 'd', 'e', 'f']
# 匹配字符串开头
print(re.findall(r'^abc', 'abcdef')) # 输出: ['abc']
# 匹配字符串结尾
print(re.findall(r'xyz$', 'abcdefxyz')) # 输出: ['xyz']
# 匹配0次或多次
print(re.findall(r'a*', 'abc')) # 输出: ['', 'a', 'aa', 'aaa']
# 匹配1次或多次
print(re.findall(r'a+', 'abc')) # 输出: ['a', 'aa', 'aaa']
# 匹配非贪婪模式
print(re.findall(r'a??', 'aaa')) # 输出: ['a', 'a', 'a']
第二部分:正则表达式高级技巧
2.1 捕获组
捕获组允许你从匹配结果中提取特定的子串。使用括号 ()
来定义捕获组。
2.2 反向引用
反向引用允许你在正则表达式中引用之前匹配的子串。
2.3 非捕获组
非捕获组允许你使用括号来分组字符,但不保存匹配结果。
2.4 前瞻断言与后瞻断言
前瞻断言和后瞻断言允许你进行更复杂的匹配,而不保存匹配结果。
2.5 贪婪与非贪婪模式
贪婪模式默认情况下,正则表达式会尽可能多地匹配字符。非贪婪模式则会尽可能少地匹配字符。
第三部分:正则表达式实战案例
3.1 电子邮件地址验证
import re
email_pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
email = 'example@example.com'
print(re.match(email_pattern, email)) # 输出: <re.Match object; span=(0, 24), match='example@example.com'>
3.2 电话号码提取
import re
phone_pattern = r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b'
phone_numbers = '123-456-70, 123.456.70, 12345670'
print(re.findall(phone_pattern, phone_numbers)) # 输出: ['123-456-70', '123.456.70', '12345670']
3.3 HTML标签清理
import re
html_content = '<div>这是一个HTML标签<div>另一个标签</div>'
clean_html = re.sub(r'<[^>]+>', '', html_content)
print(clean_html) # 输出: '这是一个HTML标签另一个标签'
结论
掌握Python正则表达式的关键符号是高效处理文本