一文掌握 Python 中的 re 模块

文摘   2024-11-19 13:30   江苏  

什么是 re 模块?

re 模块是 Python 标准库中的一个模块,用于处理正则表达式(Regular Expressions)。正则表达式是一种强大的文本匹配工具,可以用来搜索、替换、分割字符串等。通过 re 模块,我们可以轻松地在 Python 中使用正则表达式。

导入 re 模块

要使用 re 模块,首先需要导入它:

import re

基本匹配

1. re.match()

re.match() 函数用于从字符串的起始位置匹配一个模式,如果字符串的起始位置不符合模式,则返回 None

import re

# 匹配字符串的起始位置
result = re.match(r'Hello''Hello, World!')
if result:
    print('Match found:', result.group())  # 输出: Match found: Hello
else:
    print('No match')

2. re.search()

re.search() 函数用于在整个字符串中搜索第一个符合模式的子串,如果找到则返回匹配对象,否则返回 None

import re

# 在整个字符串中搜索
result = re.search(r'World''Hello, World!')
if result:
    print('Match found:', result.group())  # 输出: Match found: World
else:
    print('No match')

全局匹配

3. re.findall()

re.findall() 函数用于在字符串中找到所有符合模式的子串,并返回一个列表。

import re

# 找到所有符合模式的子串
result = re.findall(r'\b\w+\b''Hello, World! How are you?')
print(result)  # 输出: ['Hello', 'World', 'How', 'are', 'you']

4. re.finditer()

re.finditer() 函数类似于 re.findall(),但它返回一个迭代器,每个元素是一个匹配对象。

import re

# 返回一个迭代器,每个元素是一个匹配对象
for match in re.finditer(r'\b\w+\b''Hello, World! How are you?'):
    print(match.group())  # 输出: Hello, World, How, are, you

替换和分割

5. re.sub()

re.sub() 函数用于将字符串中符合模式的部分替换为指定的字符串。

import re

# 将符合模式的部分替换为指定的字符串
new_string = re.sub(r'World''Python''Hello, World!')
print(new_string)  # 输出: Hello, Python!

6. re.split()

re.split() 函数用于根据模式分割字符串,并返回一个列表。

import re

# 根据模式分割字符串
result = re.split(r',''apple,banana,orange')
print(result)  # 输出: ['apple', 'banana', 'orange']

编译正则表达式

7. re.compile()

re.compile() 函数用于编译正则表达式,生成一个正则表达式对象,可以多次复用。

import re

# 编译正则表达式
pattern = re.compile(r'\b\w+\b')

# 使用编译后的正则表达式对象进行匹配
result = pattern.findall('Hello, World! How are you?')
print(result)  # 输出: ['Hello', 'World', 'How', 'are', 'you']

高级匹配

8. 分组和捕获

正则表达式中的分组和捕获可以用于提取特定部分的匹配结果。

import re

# 分组和捕获
result = re.search(r'(\w+), (\w+)''John, Doe')
if result:
    print('First name:', result.group(1))  # 输出: First name: John
    print('Last name:', result.group(2))  # 输出: Last name: Doe

9. 非捕获分组

非捕获分组用于匹配但不捕获结果,常用于逻辑分组。

import re

# 非捕获分组
result = re.search(r'(?:\w+), (\w+)''John, Doe')
if result:
    print('Last name:', result.group(1))  # 输出: Last name: Doe

实战案例:验证邮箱地址

假设我们需要编写一个函数来验证用户输入的邮箱地址是否有效。有效的邮箱地址应符合以下规则:

  • 以字母或数字开头
  • 可以包含字母、数字、下划线 _ 和点 .
  • 必须包含一个 @ 符号
  • @ 后面必须有一个域名,域名由字母、数字、下划线 _ 和点 . 组成
  • 域名后必须有一个顶级域名,如 .com.org
import re

def is_valid_email(email):
    # 定义正则表达式
    pattern = r'^[a-zA-Z0-9][a-zA-Z0-9_.]*@[a-zA-Z0-9][a-zA-Z0-9_.]*\.[a-zA-Z]{2,}$'
    
    # 使用 re.match 进行匹配
    if re.match(pattern, email):
        return True
    else:
        return False

# 测试
emails = [
    'john.doe@example.com',
    'invalid-email@',
    'no_at_symbol.com',
    'valid_email_123@example.org',
    'valid.email@sub.domain.com'
]

for email in emails:
    print(f'{email}{is_valid_email(email)}')

总结

本文介绍了 Python 中 re 模块的基本用法,包括基本匹配、全局匹配、替换和分割、编译正则表达式、分组和捕获、非捕获分组等内容。通过实际的代码示例,逐步引导读者从简单到复杂地掌握正则表达式的使用方法。最后,通过一个实战案例展示了如何使用 re 模块验证邮箱地址的有效性。

好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!

付费合集推荐

Python编程基础

Python办公自动化-Excel

微信公众号批量上传发布系统

文末福利

公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。

精品系统

微信公众号批量上传发布系统

关注我👇,精彩不再错过


手把手PythonAI编程
分享与人工智能和python编程语言相关的笔记和项目经历。
 最新文章