引言

正则表达式(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正则表达式的关键符号是高效处理文本