You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于正则表达式修改文本文件行?求Python正则及替换方法

问题解决方案

正则表达式编写

要实现将数词与milesimo/milesimos之间添加空格的需求,需要匹配数词部分和后续的milesimo变体,替换时保留原词的单复数形式。

正确正则表达式

re_for_identificate_1 = r'([a-z]+)(milesimo(s)?)'

替换语句调整

原代码中的替换字符串需要修改为保留捕获的内容,仅插入空格:

line = re.sub(re_for_identificate_1, r'\1 \2', line)

说明:

  • 捕获组\1匹配un/dos/tres/nueve这类数词
  • 捕获组\2匹配完整的milesimo或milesimos
  • 替换时在两组之间插入空格,完美匹配示例中的转换需求(如unmilesimo→un milesimo、dosmilesimos→dos milesimos)

文件写回的最佳方式

直接用r+模式逐行读写会因文件指针位置问题导致内容覆盖混乱,推荐以下两种可靠方案:

方案1:全量读入内存后覆盖写入(适合中小型文件)

这种方式简单直观,避免指针操作的复杂问题:

import re

re_pattern = r'([a-z]+)(milesimo(s)?)'

# 读取全部文件内容
with open("data_path/filename_1.txt", "r") as file:
    content = file.read()

# 批量执行替换
content = re.sub(re_pattern, r'\1 \2', content)

# 将修改后的内容写入原文件
with open("data_path/filename_1.txt", "w") as file:
    file.write(content)

方案2:临时文件中转(适合大型文件)

如果文件体积过大,全量读入内存占用过高,可通过临时文件逐行处理,避免原文件损坏风险:

import re
import os
from tempfile import NamedTemporaryFile

re_pattern = r'([a-z]+)(milesimo(s)?)'

# 逐行处理写入临时文件
with open("data_path/filename_1.txt", "r") as src_file, \
     NamedTemporaryFile(mode="w", delete=False, dir="data_path") as tmp_file:
    for line in src_file:
        modified_line = re.sub(re_pattern, r'\1 \2', line)
        tmp_file.write(modified_line)

# 用临时文件替换原文件
os.replace(tmp_file.name, "data_path/filename_1.txt")

内容的提问来源于stack exchange,提问作者Santiago Nahuel Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:26:07