Python3 正则表达式

正则表达式是处理字符串的强大工具,它通过特定模式匹配字符串中的字符组合。在 Python3 中,re模块提供了正则表达式的全部功能。本文将从基础到进阶,详解 Python3 正则表达式的使用方法。

一、正则表达式基础

1. 核心概念

正则表达式(Regular Expression)是由普通字符(如字母、数字)和特殊字符(元字符)组成的字符串模式,用于匹配、查找或替换文本中的特定内容。

2. Python re模块

Python 通过内置的re模块操作正则表达式,使用前需导入:
 
import re
 

二、常用元字符与模式

元字符是正则表达式的核心,用于定义匹配规则。以下是最常用的元字符:

元字符含义示例
. 匹配任意单个字符(除换行符\n a.b 匹配 "aab"、"acb" 等
* 匹配前一个字符 0 次或多次 ab* 匹配 "a"、"ab"、"abb" 等
+ 匹配前一个字符 1 次或多次 ab+ 匹配 "ab"、"abb" 等(不匹配 "a")
? 匹配前一个字符 0 次或 1 次 ab? 匹配 "a"、"ab"(不匹配 "abb")
^ 匹配字符串开头 ^abc 匹配以 "abc" 开头的字符串
$ 匹配字符串结尾 abc$ 匹配以 "abc" 结尾的字符串
[] 字符集,匹配其中任意一个字符 [abc] 匹配 "a"、"b" 或 "c"
() 分组,将括号内视为一个整体 (ab)+ 匹配 "ab"、"abab" 等
| 逻辑或,匹配左边或右边的模式 ab|cd 匹配 "ab" 或 "cd"
{n} 匹配前一个字符恰好 n 次 a{2} 匹配 "aa"
{n,} 匹配前一个字符至少 n 次 a{2,} 匹配 "aa"、"aaa" 等
{n,m} 匹配前一个字符 n 到 m 次 a{2,3} 匹配 "aa"、"aaa"

特殊序列(简化模式)

序列含义
\d 匹配任意数字(等价于[0-9]
\D 匹配非数字(等价于[^0-9]
\w 匹配字母、数字、下划线(等价于[a-zA-Z0-9_]
\W 匹配非字母、数字、下划线
\s 匹配空白字符(空格、制表符\t、换行符\n等)
\S 匹配非空白字符
\b 匹配单词边界(如单词与空格之间的位置)

三、re模块核心方法

1. re.match(pattern, string)

  • 从字符串开头匹配模式,若匹配成功返回Match对象,否则返回None
  • 仅检查字符串开头是否符合模式。

2. re.search(pattern, string)

  • 在整个字符串中查找第一个匹配项,返回Match对象或None
  • match的区别:search不限制从开头匹配。

3. re.findall(pattern, string)

  • 查找字符串中所有匹配的子串,返回列表(无匹配则返回空列表)。

4. re.sub(pattern, repl, string)

  • 替换字符串中所有匹配的子串,返回替换后的新字符串。
  • repl:替换的内容(可为字符串或函数)。

5. re.split(pattern, string)

  • 根据匹配的子串分割字符串,返回分割后的列表。

四、进阶用法

1. 分组与捕获

使用()定义分组,通过Match.group(n)获取第 n 个分组的内容(group(0)表示整个匹配项)。

2. 贪婪匹配与非贪婪匹配

  • 贪婪匹配(默认):尽可能匹配最长的字符串(如*+)。
  • 非贪婪匹配:在元字符后加?,尽可能匹配最短的字符串(如*?+?)。

3. 标志位(修饰符)

通过标志位修改正则匹配的行为,常用标志:

  • re.I:忽略大小写(IGNORECASE
  • re.S:使.匹配包括换行符在内的所有字符(DOTALL
  • re.M:使^$匹配每行的开头和结尾(MULTILINE

五、实际应用场景

1. 验证手机号(中国大陆)

 
import re

def is_valid_phone(phone):
    pattern = r"^1[3-9]\d{9}$"  # 1开头,第2位3-9,后9位数字
    return bool(re.match(pattern, phone))

print(is_valid_phone("13812345678"))  # True
print(is_valid_phone("12345678901"))  # False(第2位不合法)
 

2. 提取 URL 中的域名

import re

url = "https://blog.example.com/path?query=1"
pattern = r"://([\w\-\.]+)/"  # 匹配://和/之间的域名
domain = re.search(pattern, url).group(1)
print(domain)  # 输出:blog.example.com
 

六、总结

Python 正则表达式通过re模块实现,核心在于掌握元字符和模式规则。关键要点:

  • 基础元字符(*+[]等)定义匹配逻辑;
  • match/search用于查找匹配,findall获取所有结果,sub用于替换;
  • 分组可捕获子串,非贪婪模式解决过度匹配问题;
  • 标志位可灵活调整匹配行为(如忽略大小写)。

熟练运用正则表达式,能极大提升字符串处理效率,适用于数据清洗、格式验证、文本解析等场景。

posted on 2025-08-08 09:56  小陶coding  阅读(87)  评论(0)    收藏  举报