Python基础入门 Day95 正则表达式入门

73次阅读
没有评论

共计 1788 个字符,预计需要花费 5 分钟才能阅读完成。

在处理字符串和文本时,简单的查找或替换可能无法满足需求。这时我们可以使用正则表达式(Regular Expression,简称 regex)。正则表达式是一种强大的文本匹配工具,可以帮助我们快速查找、验证和替换特定模式的文本。Python 提供了 re 模块来支持正则表达式。

  1. 正则表达式基础语法
    常见的正则表达式符号包括:
  • .:匹配任意一个字符(除换行符)。
  • ^:匹配字符串开头。
  • $:匹配字符串结尾。
  • *:匹配前一个字符 0 次或多次。
  • +:匹配前一个字符 1 次或多次。
  • ?:匹配前一个字符 0 次或 1 次。
  • {n}:匹配前一个字符恰好 n 次。
  • {n,}:匹配前一个字符至少 n 次。
  • {n,m}:匹配前一个字符 n 到 m 次。
  • []:匹配括号中的任意字符,例如 [abc] 表示匹配 a、b 或 c。
  • \d:匹配数字,相当于 [0-9]
  • \w:匹配字母、数字或下划线,相当于 [a-zA-Z0-9_]
  • \s:匹配空白字符(空格、制表符、换行符等)。
  1. Python 中使用正则表达式
    re 模块是 Python 正则表达式的核心模块。常用函数包括:
  • re.match(pattern, string):从字符串开头匹配。
  • re.search(pattern, string):扫描整个字符串,返回第一个匹配。
  • re.findall(pattern, string):返回所有匹配结果的列表。
  • re.sub(pattern, repl, string):替换匹配到的内容。

示例:

import re

# 匹配开头
result = re.match(r'Hello', 'Hello World')
print(result.group())  # 输出 Hello

# 搜索字符串
result = re.search(r'World', 'Hello World')
print(result.group())  # 输出 World

# 查找所有数字
numbers = re.findall(r'\d+', ' 我的手机号是 12345678,你的号码是 98765')
print(numbers)  # 输出 ['12345678', '98765']

# 替换数字
text = re.sub(r'\d+', '***', ' 密码 1234 不要泄露 ')
print(text)  # 输出 密码 *** 不要泄露
  1. 使用分组和捕获
    我们可以用 () 在正则表达式中进行分组,方便提取指定内容。
import re

pattern = r'(\d{4})-(\d{2})-(\d{2})'
text = ' 今天的日期是 2025-09-15'
match = re.search(pattern, text)

if match:
    print(" 年份:", match.group(1))
    print(" 月份:", match.group(2))
    print(" 日期:", match.group(3))

输出:

 年份: 2025
月份: 09
日期: 15
  1. 预编译正则表达式
    如果正则表达式需要多次使用,可以先编译,提高效率:
import re

pattern = re.compile(r'\d+')
print(pattern.findall(" 有 100 个苹果,200 个橙子 "))
  1. 实用案例
    (1) 验证邮箱
import re

email = "[email protected]"
if re.match(r'^[\w.-]+@[\w.-]+\.\w+$', email):
    print(" 合法邮箱 ")
else:
    print(" 非法邮箱 ")

(2) 提取网址

import re

text = " 请访问 https://www.python.org 或 http://example.com"
urls = re.findall(r'https?://[a-zA-Z0-9./]+', text)
print(urls)

(3) 手机号脱敏

import re

phone = "13812345678"
safe_phone = re.sub(r'(\d{3})\d{4}(\d{4})', r'\1****\2', phone)
print(safe_phone)  # 输出 138****5678

总结:
正则表达式是文本处理中的利器,能够高效地完成查找、验证和替换等操作。熟练掌握 re 模块的使用,能大大提升我们在日志分析、数据清洗、文本处理等场景中的效率。

思考与练习:

  1. 写一个正则表达式验证身份证号码(18 位数字,最后一位可能是 X)。
  2. 编写一个程序提取 HTML 文本中的所有 <a> 标签的超链接地址。
  3. 使用 re.sub 实现文本中的敏感词替换功能。
正文完
 0
评论(没有评论)