Python re字符串正则匹配

前言

在文本处理和数据分析中,经常需要对字符串进行模式匹配和提取。Python中的re模块提供了强大的正则表达式功能,能够方便地对字符串进行处理。本文将介绍re模块的基本用法,并通过代码示例详细说明。

正则表达式基础

正则表达式(Regular Expression)是一种描述字符串模式的工具。它由普通字符(例如字母、数字)和特殊字符(例如元字符、限定符)组成,用来匹配符合特定模式的字符串。

常用的正则表达式元字符包括:

  • .:匹配任意字符(除了换行符)
  • *:匹配前面的字符0次或多次
  • +:匹配前面的字符1次或多次
  • ?:匹配前面的字符0次或1次
  • ^:匹配字符串的开头
  • $:匹配字符串的结尾
  • []:匹配方括号中的任意一个字符
  • ():捕获匹配的子字符串

限定符用于指定匹配字符的数量,常用的限定符包括:

  • {n}:匹配前面的字符n次
  • {n,}:匹配前面的字符至少n次
  • {n,m}:匹配前面的字符至少n次,最多m次

re模块的基本用法

Python的re模块提供了一系列函数,用于对字符串进行正则匹配和替换。下面是re模块中常用的函数:

  • re.match(pattern, string):从字符串的开头开始匹配模式,返回一个匹配对象。

  • re.search(pattern, string):在字符串中搜索匹配模式,返回一个匹配对象。

  • re.findall(pattern, string):在字符串中搜索匹配模式,返回一个包含所有匹配项的列表。

  • re.finditer(pattern, string):在字符串中搜索匹配模式,返回一个迭代器,每次迭代返回一个匹配对象。

  • re.sub(pattern, repl, string):将字符串中匹配模式的部分替换为指定的字符串。

  • re.split(pattern, string):根据匹配模式分割字符串,返回一个列表。

下面的代码示例演示了如何使用re模块进行字符串的正则匹配和提取:

import re

# 匹配日期格式
date_str = "Today is 2022-01-01"
pattern = r"\d{4}-\d{2}-\d{2}"
match = re.search(pattern, date_str)
if match:
    print("匹配成功:", match.group())
else:
    print("匹配失败")

# 提取邮件地址
email_str = "My email is example@example.com"
pattern = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b"
emails = re.findall(pattern, email_str)
if emails:
    print("提取的邮件地址:", emails)
else:
    print("未找到邮件地址")

上述代码首先使用re.search函数匹配字符串中的日期格式,如果匹配成功,则打印匹配到的日期字符串;否则,打印匹配失败。然后,使用re.findall函数提取字符串中的邮件地址,并以列表的形式打印。

正则表达式实例

以下是一些常见的正则表达式实例:

正则表达式 描述
\d+ 匹配一个或多个数字
[A-Za-z]+ 匹配一个或多个字母
[0-9a-fA-F]+ 匹配一个或多个十六进制数字
\w+@\w+\.\w+ 匹配邮箱地址
https?://[^\s]* 匹配URL
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b 匹配邮箱地址(更精确的匹配