第七天 正则表达式

时间:2024-10-23 09:38:30

正则表达式(Regular Expressions,简称 regex)是一种强大的文本处理工具,它允许你定义搜索模式,并基于这些模式在字符串中查找、替换或提取特定的文本片段。Python 提供了内置的 re 模块来支持正则表达式的操作。

以下是一些 Python 中使用正则表达式的常见方法和示例:

导入 re 模块

首先,你需要导入 re 模块:

import re

基本用法

1. 匹配字符串

使用 re.match() 函数从字符串的起始位置匹配模式。如果匹配成功,返回一个匹配对象;否则返回 None

pattern = r'\d+'  # 匹配一个或多个数字
text = "123 abc"

match = re.match(pattern, text)
if match:
    print("Match found:", match.group())  # 输出: Match found: 123
else:
    print("No match")
2. 搜索字符串

使用 re.search() 函数在字符串中搜索模式,返回第一个匹配项。

pattern = r'\d+'
text = "abc 123 def 456"

search = re.search(pattern, text)
if search:
    print("Search found:", search.group())  # 输出: Search found: 123
else:
    print("No search found")
3. 查找所有匹配项

使用 re.findall() 函数查找字符串中所有匹配项,返回一个列表。

pattern = r'\d+'
text = "abc 123 def 456 ghi 789"

matches = re.findall(pattern, text)
print("All matches:", matches)  # 输出: All matches: ['123', '456', '789']
4. 替换字符串

使用 re.sub() 函数替换字符串中所有匹配项。

pattern = r'\d+'
text = "abc 123 def 456 ghi 789"

replaced_text = re.sub(pattern, 'XXX', text)
print("Replaced text:", replaced_text)  # 输出: Replaced text: abc XXX def XXX ghi XXX

常用正则表达式模式

  • . : 匹配除换行符以外的任意字符。
  • ^ : 匹配字符串的开始。
  • $ : 匹配字符串的结尾。
  • * : 匹配前一个字符0次或多次。
  • + : 匹配前一个字符1次或多次。
  • ? : 匹配前一个字符0次或1次。
  • {n} : 匹配前一个字符恰好n次。
  • {n,} : 匹配前一个字符至少n次。
  • {n,m} : 匹配前一个字符至少n次,至多m次。
  • [] : 字符集,匹配括号内的任意字符。
  • | : 或,匹配左右表达式中的任意一个。
  • () : 分组,用于提取匹配的子字符串。
  • \d : 匹配一个数字字符(0-9)。
  • \D : 匹配一个非数字字符。
  • \w : 匹配一个字母、数字或下划线字符。
  • \W : 匹配一个非字母、非数字或非下划线字符。
  • \s : 匹配一个空白字符(如空格、制表符等)。
  • \S : 匹配一个非空白字符。

示例:复杂模式

假设你有一个字符串,包含邮箱地址,你想提取所有的邮箱地址:

text = "Contact us at support@example.com or marketing@test.org for more info."
pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'

emails = re.findall(pattern, text)
print("Emails found:", emails)  # 输出: Emails found: ['support@example.com', 'marketing@test.org']

编译正则表达式

为了提高性能,你可以使用 re.compile() 编译正则表达式模式,然后使用该编译后的模式进行匹配、搜索或替换操作。

pattern = re.compile(r'\d+')
text = "abc 123 def 456"

search = pattern.search(text)
if search:
    print("Search found:", search.group())  # 输出: Search found: 123

正则表达式是一个非常强大的工具,可以帮助你高效地处理字符串。希望这些示例能帮助你理解如何在 Python 中使用正则表达式。