Python基础入门 Day89 文件处理中的正则表达式应用

57次阅读
没有评论

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

正则表达式是强大的文本处理工具,能够帮助我们在文件中查找、匹配和替换复杂的文本模式。在文件处理时,我们经常需要使用正则表达式来提取特定信息或清理数据。本节将介绍如何在文件处理中结合正则表达式进行匹配和替换操作。

  1. 正则表达式基础
    正则表达式通过 re 模块提供支持,允许我们使用模式来匹配字符串。常见的正则表达式符号包括:
  • .:匹配任意字符(除了换行符)
  • \d:匹配任意数字
  • \w:匹配字母、数字或下划线
  • +:匹配前一个字符一次或多次
  • *:匹配前一个字符零次或多次
  • []:匹配方括号中的任何一个字符
  • ():分组,用于提取匹配的子串

例如,使用正则表达式匹配一个电话号码:

import re

phone_pattern = r"\d{3}-\d{3}-\d{4}"
text = " 我的电话号码是 123-456-7890"
match = re.search(phone_pattern, text)
if match:
    print(f" 找到电话号码:{match.group()}")
  1. 在文件中使用正则表达式查找内容
    我们可以使用 re.search()re.findall() 在文件中查找匹配的文本。
import re

def find_phone_numbers_in_file(file_path):
    phone_pattern = r"\d{3}-\d{3}-\d{4}"
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()
        phone_numbers = re.findall(phone_pattern, content)
        return phone_numbers

# 示例:查找文件中的所有电话号码
file_path = "contacts.txt"
phone_numbers = find_phone_numbers_in_file(file_path)
print(phone_numbers)

此方法会返回文件中所有符合模式的电话号码列表。

  1. 正则表达式替换文件中的内容
    我们可以使用 re.sub() 来替换文件中的内容。假设我们要将文件中的所有电话号码格式从 xxx-xxx-xxxx 修改为 xxx.xxx.xxxx
import re

def replace_phone_numbers_in_file(file_path):
    phone_pattern = r"(\d{3})-(\d{3})-(\d{4})"
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()
    
    updated_content = re.sub(phone_pattern, r"\1.\2.\3", content)
    
    with open(file_path, "w", encoding="utf-8") as f:
        f.write(updated_content)

# 示例:替换文件中的电话号码格式
replace_phone_numbers_in_file("contacts.txt")

此代码将所有符合 xxx-xxx-xxxx 格式的电话号码替换为 xxx.xxx.xxxx

  1. 在文件中查找和提取特定数据
    假设我们有一个包含邮件列表的文件,并希望提取所有以 @gmail.com 结尾的邮件地址。
import re

def extract_gmail_addresses(file_path):
    email_pattern = r"[a-zA-Z0-9._%+-]+@gmail\.com"
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()
    
    gmail_addresses = re.findall(email_pattern, content)
    return gmail_addresses

# 示例:提取所有 Gmail 地址
gmail_addresses = extract_gmail_addresses("emails.txt")
print(gmail_addresses)

这里使用正则表达式匹配并提取所有以 @gmail.com 结尾的邮件地址。

  1. 正则表达式匹配复杂文本模式
    我们可以使用正则表达式处理更复杂的文本匹配任务。例如,提取一个文件中的日期(如 2024-01-01 格式的日期)。
import re

def extract_dates(file_path):
    date_pattern = r"\d{4}-\d{2}-\d{2}"  # 匹配日期格式 YYYY-MM-DD
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()
    
    dates = re.findall(date_pattern, content)
    return dates

# 示例:提取文件中的所有日期
dates = extract_dates("logfile.txt")
print(dates)

通过正则表达式,可以轻松提取符合日期格式的所有字符串。

总结:
在文件处理中结合正则表达式,能够帮助我们高效地进行文本查找、提取和替换等操作。无论是简单的字符串匹配,还是复杂的数据清理和提取,正则表达式都是不可或缺的工具。

练习与思考:

  1. 编写一个程序,提取文件中的所有 IP 地址,并输出。
  2. 使用正则表达式修改日志文件中的时间格式,将 YYYY-MM-DD HH:MM:SS 改为 DD-MM-YYYY HH:MM 格式。
  3. 使用正则表达式查找并替换文件中所有的邮箱地址,将其替换为 "[email protected]"。
正文完
 0
评论(没有评论)