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 |
匹配邮箱地址(更精确的匹配 |