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

如何用Notepad++正则表达式在多行指定位置插入指定字符?

在固定字符位置插入指定字符的解决方案

针对结构化文件每行在固定位置插入同一字符的需求,以下是两种实用的处理方案:

方案1:使用awk命令处理

awk适合快速处理文本文件,核心思路是从后往前处理指定位置,避免插入字符后导致后续位置偏移。

代码实现

假设要插入的字符为;,指定位置为2、5、7、11、15,创建处理脚本insert.awk:

BEGIN {
    split("15 11 7 5 2", pos);  # 倒序排列位置,避免插入后偏移
    char = ";"
}
{
    line = $0
    for (i in pos) {
        p = pos[i]
        if (length(line) >= p) {
            # 从指定位置拆分字符串并插入字符
            line = substr(line, 1, p) char substr(line, p+1)
        } else {
            # 行长度不足指定位置时,直接在末尾插入
            line = line char
        }
    }
    print line
}

使用方式

执行命令处理目标文件,输出到新文件:

awk -f insert.awk input.txt > output.txt

效果验证

  • 原行:GO12 ABCDEFG 32 → 处理后:GO;12 ;AB;CDEF;G 32;
  • 原行: A BC TEST 121 → 处理后: A; BC; T;EST ; 121;

方案2:使用Python脚本处理

如果更熟悉Python,可以编写脚本实现相同逻辑,灵活性更强。

代码实现

insert_char = ';'
positions = [2, 5, 7, 11, 15]
# 倒序排列位置,确保插入不影响后续位置计数
positions_sorted = sorted(positions, reverse=True)

with open('input.txt', 'r') as f_in, open('output.txt', 'w') as f_out:
    for line in f_in:
        line = line.rstrip('\n')
        current_line = list(line)
        for pos in positions_sorted:
            # 转换为0索引:指定位置是1-based,插入位置在该字符后
            insert_idx = pos  # 因为pos是前一个字符的位置,插入位置是pos的下一位
            if insert_idx <= len(current_line):
                current_line.insert(insert_idx, insert_char)
            else:
                current_line.append(insert_char)
        f_out.write(''.join(current_line) + '\n')

关键说明

  • 必须倒序处理位置:如果从前往后插入,新增的字符会让后续位置的实际索引偏移,导致插入错误。
  • 适配短行:当行长度小于指定位置时,自动在末尾插入字符,可根据需求修改为忽略该位置或补空格后插入。

内容的提问来源于stack exchange,提问作者Xnimak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:50:18