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

Notepad++提取两字符间内容并按要求修改格式的方法

处理文本块的分步解决方案

针对你的需求,我会用Python来实现——它处理多行文本的逻辑更灵活,能轻松应对不同行数的情况。下面是具体的思路和代码:

核心思路

你已经用正则匹配到了####包裹的块,但要注意默认正则的.是不匹配换行的,所以需要开启跨行匹配模式来捕获中间的所有行。然后对中间的内容按行拆分,分别完成三个操作:

  1. 第一行末尾加问号
  2. 第二、三行开头加斜杠
  3. 把处理后的行重新拼接,再和前后的####组合替换原内容

具体代码实现

import re

# 读取目标文本文件
with open('your_input_file.txt', 'r', encoding='utf-8') as f:
    raw_content = f.read()

# 定义正则,开启DOTALL模式让.匹配换行符
block_pattern = re.compile(r'(####)(.*?)(####)', re.DOTALL)

def process_middle_content(match_obj):
    # 提取三个分组的内容
    start_tag = match_obj.group(1)
    middle_lines = match_obj.group(2)
    end_tag = match_obj.group(3)
    
    # 拆分中间内容为行,保留每行的换行符(避免格式丢失)
    split_lines = middle_lines.splitlines(True)
    
    # 处理第一行:末尾添加问号
    if split_lines:
        # 先去掉行尾换行,加问号后再补回换行
        split_lines[0] = split_lines[0].rstrip('\n') + '?\n'
    
    # 处理第二、三行:开头加斜杠
    # 循环索引1和2(对应第二、三行),同时判断行数是否足够
    for line_idx in range(1, min(3, len(split_lines))):
        split_lines[line_idx] = '/' + split_lines[line_idx]
    
    # 重新拼接处理后的中间内容
    processed_middle = ''.join(split_lines)
    
    # 返回完整的处理后块
    return start_tag + processed_middle + end_tag

# 替换所有匹配的文本块
final_content = block_pattern.sub(process_middle_content, raw_content)

# 写入处理后的文件
with open('your_output_file.txt', 'w', encoding='utf-8') as f:
    f.write(final_content)

关键细节说明

  • re.DOTALL:确保正则表达式能跨行匹配,捕获####之间的所有内容,包括换行。
  • splitlines(True):拆分时保留每行的换行符,这样处理后文本的换行格式不会混乱。
  • 边界处理:如果中间内容只有1行,就只处理第一行;如果有2行,就处理第一、二行,第三行不存在则跳过,避免报错。

如果你习惯用命令行工具,也可以用sed来实现(适合固定行数的场景),比如假设每个####块后刚好有3行内容:

sed -E '
/^####$/{
    N
    s/(.*)\n(.*)/\1\n\2?/
    N
    s/(.*)\n(.*)/\1\n\/\2/
    N
    s/(.*)\n(.*)/\1\n\/\2/
}' your_input_file.txt > your_output_file.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:30:11