如何用正则表达式为特定格式字符串添加前后字符并保留原内容?
完整批量替换方案
核心正则表达式
要匹配你描述的标题结构,完整正则如下(适配整行标题场景,避免误匹配):
^([A-Z]\w+\s[A-Z]\w+\s\[\d{2}:\d{2}:\d{2}\])$
替换规则为:
{$1}:
正则说明
^/$:锚定行首行尾,确保仅匹配整行符合格式的标题[A-Z]\w+:匹配首字母大写的单词(\w包含字母、数字、下划线;若需严格匹配纯字母,可替换为[A-Z][a-zA-Z]+)\s:匹配单词间的空格\[\d{2}:\d{2}:\d{2}\]:匹配[HH:MM:SS]格式的时间(\[/\]转义方括号,\d{2}匹配两位数字)$1:引用正则中捕获的整个标题内容
常用批量实现方式
1. VS Code 编辑器批量替换
适合可视化操作单文件或多文件:
- 打开目标文档,按
Ctrl+H(Windows/Linux)或Cmd+H(macOS)打开替换面板 - 点击面板右侧的「正则表达式」按钮(图标为
.*) - 查找框输入上述正则,替换框输入
{$1}: - 点击「替换全部」完成批量修改,或逐行点击「替换」确认
2. Python 脚本批量处理多文件
适合编程自动化处理大量文档:
import re import os # 定义匹配规则(支持多行匹配) title_pattern = re.compile(r'^([A-Z]\w+\s[A-Z]\w+\s\[\d{2}:\d{2}:\d{2}\])$', re.MULTILINE) def process_single_file(file_path): # 读取原文件内容 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 执行替换 updated_content = title_pattern.sub(r'{\1}:', content) # 保存为新文件(避免覆盖原文件,可修改为直接覆盖) output_path = file_path.replace('.txt', '_modified.txt') with open(output_path, 'w', encoding='utf-8') as f: f.write(updated_content) print(f"已处理:{output_path}") # 批量处理指定目录下的所有TXT文件 target_directory = './your_document_folder' for filename in os.listdir(target_directory): if filename.endswith('.txt'): process_single_file(os.path.join(target_directory, filename))
3. Linux/macOS 终端 sed 命令
适合快速批量处理:
- 单文件处理(输出到新文件):
sed -E 's/^([A-Z][a-zA-Z]+\s[A-Z][a-zA-Z]+\s\[[0-9]{2}:[0-9]{2}:[0-9]{2}\])$/{&}:/' input.txt > output.txt - 批量处理当前目录下所有TXT文件(自动备份原文件):
注:for file in *.txt; do sed -i.bak -E 's/^([A-Z][a-zA-Z]+\s[A-Z][a-zA-Z]+\s\[[0-9]{2}:[0-9]{2}:[0-9]{2}\])$/{&}:/' "$file" done-i.bak会生成原文件的备份(如input.txt.bak),可根据需求删除备份。
适配调整方案
如果标题前后有多余空格,可修改正则为:
^\s*([A-Z]\w+\s[A-Z]\w+\s\[\d{2}:\d{2}:\d{2}\])\s*$
替换规则不变,会自动去除标题前后的空格,仅保留核心内容包裹在{}后加冒号。
内容的提问来源于stack exchange,提问作者stefano
相关产品推荐
相关产品推荐

