如何仅对Markdown图片的方括号内文本执行Un-CamelCase操作而不修改文件名?
如何仅对Markdown图片的方括号内文本执行Un-CamelCase操作而不修改文件名?
这个需求太贴合实际了!想拆分alt文本里的驼峰命名,又怕不小心改到后面的文件名,其实只要给你的正则加个「范围锁」就行,让它只在方括号[]里的内容里找匹配位置。
方法一:在常用编辑器(VS Code/Sublime Text等)里快速替换
直接用下面的正则做查找替换:
- 查找内容:
(?<=\!\[[^\]]*)(?<=[a-z])(?=[A-Z])(?=[^\]]*\]) - 替换内容:
(一个空格)
我给你拆解下这个正则的作用:
(?<=\!\[[^\]]*):确保当前位置在![之后,且还没到],直接锁定在方括号的内容范围内(?<=[a-z])(?=[A-Z]):你原来用来匹配「小写字母后接大写字母」的核心规则(?=[^\]]*\]):确保当前位置后面还有内容直到],进一步限定只能在方括号内操作
举个例子,原来的文本:

用这个替换后就会变成:

完全不会碰后面的文件名,完美符合你的需求!
方法二:用脚本批量处理(比如Python)
如果需要批量处理大量Markdown文件,可以写个小脚本自动处理:
import re def fix_alt_text(file_path): # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 定义替换逻辑:只处理方括号内的驼峰文本 def replace_camelcase(match): alt_text = match.group(2) # 拆分驼峰 new_alt = re.sub(r'(?<=[a-z])(?=[A-Z])', ' ', alt_text) # 拼接回原格式 return f"{match.group(1)}{new_alt}{match.group(3)}" # 替换所有图片的alt文本 updated_content = re.sub(r'(\!\[)([^\]]+)(\])', replace_camelcase, content) # 保存修改后的内容 with open(file_path, 'w', encoding='utf-8') as f: f.write(updated_content) # 调用示例,替换单个文件 fix_alt_text("your_markdown_file.md")
这个脚本会遍历文件里所有的图片语法,只修改方括号里的alt文本,文件名原封不动。
备注:内容来源于stack exchange,提问作者CJB




