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

如何在Notepad++或Python中替换键中非单词字符为下划线并保留冒号右侧内容

我来帮你搞定这个问题!不管是用Notepad++快速完成替换,还是用Python做批量处理/后续操作,都有精准的解决方案:

Notepad++ 正则替换方案

这个方案利用PCRE正则的\G锚点和\K断言,精准只替换冒号左侧的非单词字符(\W),完全保留冒号及右侧内容:

  1. 打开目标文本,按Ctrl+H调出替换对话框
  2. 在「查找模式」中选择正则表达式,不要勾选「.匹配换行符」(确保按行处理)
  3. 输入以下内容:
    • 查找内容:(?:^[^:]*|\G[^:]*)K\W
    • 替换为:_
  4. 点击「全部替换」,搞定!

正则逻辑说明

  • (?:^[^:]*|\G[^:]*):匹配每行开头到冒号前的区域,或者从上一次匹配结束的位置继续匹配冒号前的内容
  • \K:丢弃之前匹配的内容,只替换后面的非单词字符
  • \W:匹配所有非单词字符(空格、%、'、-、,等)

Python 批量处理脚本

如果需要后续对格式化后的文本做进一步操作,用Python脚本更灵活,下面的函数会逐行处理文本,精准实现需求:

import re

def format_target_text(input_text):
    # 按行拆分文本
    lines = input_text.split('\n')
    processed_lines = []
    
    for line in lines:
        if ':' in line:
            # 只分割第一次出现的冒号,区分左右部分
            left_segment, right_segment = line.split(':', 1)
            # 替换左侧所有非单词字符为下划线
            formatted_left = re.sub(r'\W', '_', left_segment)
            # 拼接保留冒号和右侧内容
            processed_line = f"{formatted_left}:{right_segment}"
        else:
            # 无冒号的行,直接替换所有非单词字符
            processed_line = re.sub(r'\W', '_', line)
        
        processed_lines.append(processed_line)
    
    # 合并为多行文本返回
    return '\n'.join(processed_lines)

# 测试示例
if __name__ == "__main__":
    sample_input = """This 100% isn't what I want Yet, it's-what-I've got currently: D@rnit :(
Another line without colon! Let's test it.
Third line with indent  : Keep this part @#$%"""
    
    print("处理后结果:")
    print(format_target_text(sample_input))

脚本特点

  • 自动识别每行是否包含冒号,分别处理
  • 只分割第一次出现的冒号,避免右侧内容中的冒号被误处理
  • 完全保留冒号右侧的所有原始内容(包括特殊字符、空格等)
  • 无冒号的行自动替换所有非单词字符为下划线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:29:01