如何在Notepad++或Python中替换键中非单词字符为下划线并保留冒号右侧内容
我来帮你搞定这个问题!不管是用Notepad++快速完成替换,还是用Python做批量处理/后续操作,都有精准的解决方案:
Notepad++ 正则替换方案
这个方案利用PCRE正则的\G锚点和\K断言,精准只替换冒号左侧的非单词字符(\W),完全保留冒号及右侧内容:
- 打开目标文本,按
Ctrl+H调出替换对话框 - 在「查找模式」中选择正则表达式,不要勾选「.匹配换行符」(确保按行处理)
- 输入以下内容:
- 查找内容:
(?:^[^:]*|\G[^:]*)K\W - 替换为:
_
- 查找内容:
- 点击「全部替换」,搞定!
正则逻辑说明
(?:^[^:]*|\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
相关产品推荐
相关产品推荐

