替换ASS/SRT字幕文件""为「」的方法和工具。
本帖最后由 waecy 于 2024-5-20 19:31 编辑感谢坛友的各种方法
第1种 支持正则匹配的文本编辑器替换法
感谢12楼 @Lambholl 提供最简单方法
支持正则的文本编辑器
notepad++
EmEditor
…
都可以
① Ctrl + H打开替换
② 勾选「正则表达式」选项
③ 「查找」文本框输入以下任意一条正则
\"(.+?)\""([^"]*)"\x22([^\x22\r\n]+?)\x22已亲测,都可正常替换双引号为「」
感谢13楼 @Yukarubih 补充其他正则
匹配双引号通用型, 不用考虑转义(\x22:ASCII码表示的双引号)
\x22(.*?)\x22
不匹配 ""(单纯的两个双引号)
"([^"]*)"
以下通义千问的解析
1. \"(.+?)\"
[*]目的:这个表达式用于匹配由转义双引号(看起来像 \")包围的任何内容,包括文本、数字、空格等。它采用非贪婪方式匹配(也就是尽量少地匹配字符),因此即使内部是空的也会匹配(但至少会匹配一对转义双引号)。
[*]例子:在字符串 "He said, \"Hello there!\"" 中,它会匹配到 \"Hello there!\"。
2. "([^"]*)"
[*]目的:用于匹配由标准双引号(")包围的非空内容,确保内部没有未转义的双引号。使用了否定字符集[^"]来排除双引号本身,星号(*)表明这些非双引号字符可以出现任意次数,但至少要有一次,因此不会匹配空的双引号对。
[*]例子:在 "Today is a sunny day." 中,它会匹配到 Today is a sunny day.。而 "" 不会被匹配。
3. \x22([^\x22\r\n]+?)\x22
[*]目的:这个表达式匹配由ASCII码表示的双引号(\x22)包围的任何非空内容,同时确保内容中不包含未转义的双引号、回车符(\r)和换行符(\n)。这使得它适用于文本行内双引号内容的匹配,排除了可能导致字符串提前结束的特殊字符。
[*]例子:在字符串 \x22A line of text without newline or quotes.\x22 中,它会匹配到 A line of text without newline or quotes.。这个表达式更加严格,避免了跨行或含有内部未转义双引号的匹配。
总结
[*]\"(.+?)\" 适用于广泛查找转义双引号内的内容,即使内容为空。
[*]"([^"]*)" 专用于捕获不含内部双引号的非空字符串。
[*]\x22([^\x22\r\n]+?)\x22 更为精确,不仅排除内部双引号,还排除了换行和回车,适用于精确控制的文本段落处理。
④ 「替换完」文本框输入
「$1」
⑤ 点击「全部替换」或「替换全部」就可以了
优点:
① 操作简单,哪怕不懂正则的,直接拿来用就行
② 可以不用管SRT/ASS字幕文本格式
无论ANSI还是UTF-16或UTF-8格式,只要拖动到支持正则的文本编辑器都可以一键替换
缺点:
① 不懂正则的,每次需要输入正则,不过文本编辑器只要替换过,都有下拉记录次数功能.如果不是常使用,直接从记录里下拉就行
PS:如果不想每次复制/粘贴使用正则,可以用「Ditto」这款监视剪切板,可以置顶指定正则来随时替换,快捷键呼出悬浮窗口直接选择
https://i.vgy.me/kXIrUh.png
第2种 批处理法
@tmdtmdtmdqq 感谢6楼写的批处理,可以批量拖动处理双引号替换「」,但注意ASS格式,不支持ANSI格式, 更改后默认乱码,UTF-8和UTF-16都可以正常更改显示
https://i.vgy.me/B9d9d6.png
优点:
① 不用每次打开字幕文件,直接拖动就可以生成更改后的文件
② 原来字幕文件备份新文件,以防一些错误发生
③ 通用性强,不单单能用来替换双引号,可以修改代码使用其他正则或文本替换
缺点:
① 必须每次把bat放到字幕目录下,或者分开放拖动使用
② 测试不支持ANSI格式,如果字幕文件是各种格式混搭的,有ANSI格式的,还有UTF-8的,还得转换格式才能使用
第3种 本地网页离线法
HTML + CSS + javaScript代码实现
① 单文件替换双引号为「」,双行预览,导出原文件名,加高亮,滚动条同步
https://i.vgy.me/kkEsgV.png
https://i.vgy.me/NCe1bZ.png
② 多文件替换双引号为「」,添加后缀,点击按钮批量下载
https://i.vgy.me/ugEBQb.png
优点:
① 单文件可以高亮对照修改符号
不过这个功能,可有可无
② 下拉同步预览,notepad++也有插件可以做到,也没太大优势
缺点:
① 必须每次打开HTML,但这点可以放到书签收藏
② 多文件一键下载.浏览器一般默认同步下载.并不是完全异步下载.多文件替换完成需要几秒,或者文件多,有可能几十秒
批处理+系统自带powershell,带源文件备份功能
支持多文件,把多个字幕文件拖到图标就行
也可以双击打开进行单个文件路径输入
PS1:因批处理脚本处理转义字符输入困难,某些含特殊字符的文件名/文件路径过长可能会报错,你可以先改字幕名字再扔进去处理
PS2:想修改其它就自己改脚本开头的 匹配模式变量patternMatchX 和 替换文本变量replaceTextX(X是数字,暂时只支持同时替换3个匹配)。默认区分大小写,不想区分则修改变量caseSensitiveFlag为0
本帖最后由 Lambholl 于 2024-5-20 10:58 编辑
正则表达式替换
\\"(.+?)\\"替换成
「$1」https://p.sda1.dev/17/da3780a1f2a2a4d933af6fbedcaa154f/image.png
https://p.sda1.dev/17/e65a2c3dfddd8189081b381eed884be5/image.png
本帖最后由 Yukarubih 于 2024-6-14 01:46 编辑
楼主的总结能力很优秀啊。
补充几个小技巧,完善帖子:
匹配双引号通用型, 不用考虑转义(\x22:ASCII码表示的双引号):
\x22(.*?)\x22
不匹配 ""(单纯的两个双引号):
\x22([^\x22\r\n]+?)\x22
import re
def replace_quotes(text):
return re.sub(r'"(.*?)"', r'「\1」', text)
# Test the function
text = 'She said, "Hello, World!"'
print(replace_quotes(text))
GPT写的,用regex101测试了一下应该好使 yswysc 发表于 2024-5-17 17:57
GPT写的,用regex101测试了一下应该好使
万能的GPT(
我AE表达式也是找GPT写的,超好用
本帖最后由 waecy 于 2024-5-17 20:16 编辑
yswysc 发表于 2024-5-17 17:57
GPT写的,用regex101测试了一下应该好使
如果把目录下所有*.ass都替换,在新建文件夹,批量替换后输出新文件,请问该如何更改?
举例
文件内包含一个或多个""
Dialogue: 0,0:08:32.36,0:08:34.67,*Default,NTP,0,0,0,,你说"怎么一回事"? 就是这么一回事啊
Dialogue: 0,0:08:28.29,0:08:30.52,*Default,NTP,0,0,0,,你说要把"那个"要送给"那个人" 有没有搞错啊?怎样替换成「」格式
Dialogue: 0,0:08:32.36,0:08:34.67,*Default,NTP,0,0,0,,你说「怎么一回事」? 就是这么一回事啊
Dialogue: 0,0:08:28.29,0:08:30.52,*Default,NTP,0,0,0,,你说要把「那个」要送给「那个人」有没有搞错啊?保存新建「更改后」文件夹内
本帖最后由 ttt805446984 于 2024-5-17 21:25 编辑
waecy 发表于 2024-5-17 20:14
如果把目录下所有*.ass都替换,在新建文件夹,批量替换后输出新文件,请问该如何更改?
下个Arctime Pro,里面有个字幕处理功能,可以批量替换字符
补个图https://p.sda1.dev/17/69aeb72280d87ac4e1336530f7c4ab57/image.png
ttt805446984 发表于 2024-5-17 21:23
下个Arctime Pro,里面有个字幕处理功能,可以批量替换字符
补个图
试了下,这个替换和普通文本编辑器一样,没法单独匹配", 双引号单独替换「」,正则匹配是只能查到""内的,单独替换",会导致全部替换「或」
刚用了javaScript倒是可以实现, 不过每次都得单独打开HTML,再选择字幕文本,导出速度也有些慢_(:з」∠)_
先看看坛友有没其他方法了
tmdtmdtmdqq 发表于 2024-5-17 22:26
批处理+系统自带powershell,带源文件备份功能
刚下载测试了下,发现""没替换「」
https://i.vgy.me/oU8UI0.png
fd -e ass -x sed -i 's/〞\([^〞]*\)〞/「\1」/g'
看到这个(" ")符号 不知道这里有没有 猎户发布组 的组员,希望他们的(" ")也可以换成「」{:4_684:}
页:
[1]
2