找回密码
 立即注册
查看: 3591|回复: 17

替换ASS/SRT字幕文件""为「」的方法和工具。

35

主题

140

回帖

260

VC币

星辰大海

爱の探求者

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
401240

崭露头角活跃达人

waecy 发表于 2024-5-17 17:00:31 | 显示全部楼层 |阅读模式
本帖最后由 waecy 于 2024-5-20 19:31 编辑

感谢坛友的各种方法


第1种 支持正则匹配的文本编辑器替换法
感谢12楼 @Lambholl 提供最简单方法


支持正则的文本编辑器

notepad++
EmEditor

都可以

① Ctrl + H打开替换

② 勾选「正则表达式」选项

③ 「查找」文本框输入以下任意一条正则
  1. "(.+?)"
复制代码
  1. "([^"]*)"
复制代码
  1. \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」这款监视剪切板,可以置顶指定正则来随时替换,快捷键呼出悬浮窗口直接选择



第2种 批处理法
@tmdtmdtmdqq 感谢6楼写的批处理,可以批量拖动处理双引号替换「」,但注意ASS格式,不支持ANSI格式, 更改后默认乱码,UTF-8和UTF-16都可以正常更改显示


regexp_replacer.rar (1.6 KB, 下载次数: 200)


优点:
① 不用每次打开字幕文件,直接拖动就可以生成更改后的文件
② 原来字幕文件备份新文件,以防一些错误发生
③ 通用性强,不单单能用来替换双引号,可以修改代码使用其他正则或文本替换

缺点:
① 必须每次把bat放到字幕目录下,或者分开放拖动使用
② 测试不支持ANSI格式,如果字幕文件是各种格式混搭的,有ANSI格式的,还有UTF-8的,还得转换格式才能使用


第3种 本地网页离线法
HTML + CSS + javaScript代码实现

① 单文件替换双引号为「」,双行预览,导出原文件名,加高亮,滚动条同步




② 多文件替换双引号为「」,添加后缀,点击按钮批量下载

离线网页版.7z (6.12 KB, 下载次数: 192)


优点:
① 单文件可以高亮对照修改符号
不过这个功能,可有可无
② 下拉同步预览,notepad++也有插件可以做到,也没太大优势

缺点:
① 必须每次打开HTML,但这点可以放到书签收藏
② 多文件一键下载.浏览器一般默认同步下载.并不是完全异步下载.多文件替换完成需要几秒,或者文件多,有可能几十秒







评分

参与人数 1活跃度 +3200 收起 理由
Xibeilius + 3200 非常好经验,使我给出评分。

查看全部评分

「ANCG美好,在于代入角色用心感受,感悟,理解不同世界和与众不同的生存方式。
当了解这段话时,这将成汝之宝藏。」
回复

使用道具 举报

49

主题

531

回帖

1万

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
2209108
tmdtmdtmdqq 发表于 2024-5-17 22:26:31 | 显示全部楼层
批处理+系统自带powershell,带源文件备份功能


支持多文件,把多个字幕文件拖到图标就行
也可以双击打开进行单个文件路径输入


PS1:因批处理脚本处理转义字符输入困难,某些含特殊字符的文件名/文件路径过长可能会报错,你可以先改字幕名字再扔进去处理
PS2:想修改其它就自己改脚本开头的 匹配模式变量patternMatchX 和 替换文本变量replaceTextX  (X是数字,暂时只支持同时替换3个匹配)。默认区分大小写,不想区分则修改变量caseSensitiveFlag为0



regexp_replacer.rar (1.6 KB, 下载次数: 187)


点评

感谢,方便多了,原来直接改的原文件,新增的文件是备份,还以为是反着来的  发表于 2024-5-17 23:03
欢迎报错继续向上改进我改进过的字幕。
请勿将无实质性修改、劣化精简本人改进过的字幕重新发布到此论坛:如仅改名、仅打包、修改总错字数≤5、删除特效等。       ——20230204
本人改进过的字幕,禁止以任何形式进行商用。若要附带在视频、种子中发布,请先咨询。      ——20231203
一些字幕搜寻、制作的方法和经验汇总  →  >>>帖子<<<
禁止DBD-Raws及其相关人士使用本人所有制作或修正改进过的字幕(包括过往的)      ——20240730
回复

使用道具 举报

25

主题

324

回帖

1056

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
407461
Lambholl 发表于 2024-5-20 10:56:58 | 显示全部楼层
本帖最后由 Lambholl 于 2024-5-20 10:58 编辑

正则表达式替换
  1. \"(.+?)\"
复制代码
替换成
  1. 「$1」
复制代码


点评

太感谢了,原来替换为「$1」就可以忽略匹配到的双引号中间文本直接替换,又学会一招  发表于 2024-5-20 11:59
回复

使用道具 举报

5

主题

62

回帖

106

VC币

至尊会员

Rank: 16Rank: 16Rank: 16Rank: 16

积分
270692
Yukarubih 发表于 2024-5-20 18:25:12 | 显示全部楼层
本帖最后由 Yukarubih 于 2024-6-14 01:46 编辑

 
楼主的总结能力很优秀啊。
补充几个小技巧,完善帖子:
 
匹配双引号通用型, 不用考虑转义(\x22ASCII码表示的双引号):
  1. \x22(.*?)\x22
复制代码
 
不匹配 ""(单纯的两个双引号):
  1. \x22([^\x22\r\n]+?)\x22
复制代码

点评

感谢补充  发表于 2024-5-20 19:00
回复

使用道具 举报

9

主题

413

回帖

58

VC币

版主

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
764230

不离不弃论坛管理组日积月累风雨无阻活跃达人

yswysc 发表于 2024-5-17 17:57:57 | 显示全部楼层
  1. import re

  2. def replace_quotes(text):
  3.     return re.sub(r'"(.*?)"', r'「\1」', text)

  4. # Test the function
  5. text = 'She said, "Hello, World!"'
  6. print(replace_quotes(text))
复制代码

GPT写的,用regex101测试了一下应该好使
回复

使用道具 举报

26

主题

397

回帖

455

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
394374

新人登场崭露头角渐入佳境活跃达人

橙兜酱 发表于 2024-5-17 18:36:44 | 显示全部楼层
yswysc 发表于 2024-5-17 17:57
GPT写的,用regex101测试了一下应该好使

万能的GPT(
我AE表达式也是找GPT写的,超好用
动画年鉴-统计表 (notion.so)
动画年鉴网盘目录 (xido.workers.dev)

欢迎参观,如果想一起收集整理的话可以在统计表主页找我联系方式~
回复

使用道具 举报

35

主题

140

回帖

260

VC币

星辰大海

爱の探求者

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
401240

崭露头角活跃达人

waecy  楼主| 发表于 2024-5-17 20:14:24 | 显示全部楼层
本帖最后由 waecy 于 2024-5-17 20:16 编辑
yswysc 发表于 2024-5-17 17:57
GPT写的,用regex101测试了一下应该好使

如果把目录下所有*.ass都替换,在新建文件夹,批量替换后输出新文件,请问该如何更改?


举例
文件内包含一个或多个""

  1. Dialogue: 0,0:08:32.36,0:08:34.67,*Default,NTP,0,0,0,,你说"怎么一回事"? 就是这么一回事啊
  2. Dialogue: 0,0:08:28.29,0:08:30.52,*Default,NTP,0,0,0,,你说要把"那个"要送给"那个人" 有没有搞错啊?
复制代码
怎样替换成「」格式
  1. Dialogue: 0,0:08:32.36,0:08:34.67,*Default,NTP,0,0,0,,你说「怎么一回事」? 就是这么一回事啊
  2. Dialogue: 0,0:08:28.29,0:08:30.52,*Default,NTP,0,0,0,,你说要把「那个」要送给「那个人」有没有搞错啊?
复制代码
保存新建「更改后」文件夹内
「ANCG美好,在于代入角色用心感受,感悟,理解不同世界和与众不同的生存方式。
当了解这段话时,这将成汝之宝藏。」
回复

使用道具 举报

8

主题

176

回帖

0

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
311982
ttt805446984 发表于 2024-5-17 21:23:33 | 显示全部楼层
本帖最后由 ttt805446984 于 2024-5-17 21:25 编辑
waecy 发表于 2024-5-17 20:14
如果把目录下所有*.ass都替换,在新建文件夹,批量替换后输出新文件,请问该如何更改?

下个Arctime Pro,里面有个字幕处理功能,可以批量替换字符

补个图
回复

使用道具 举报

35

主题

140

回帖

260

VC币

星辰大海

爱の探求者

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
401240

崭露头角活跃达人

waecy  楼主| 发表于 2024-5-17 22:27:19 | 显示全部楼层
ttt805446984 发表于 2024-5-17 21:23
下个Arctime Pro,里面有个字幕处理功能,可以批量替换字符

补个图

试了下,这个替换和普通文本编辑器一样,没法单独匹配", 双引号单独替换「」,正则匹配是只能查到""内的,单独替换",会导致全部替换「或」


刚用了javaScript倒是可以实现, 不过每次都得单独打开HTML,再选择字幕文本,导出速度也有些慢_(:з」∠)_

先看看坛友有没其他方法了
「ANCG美好,在于代入角色用心感受,感悟,理解不同世界和与众不同的生存方式。
当了解这段话时,这将成汝之宝藏。」
回复

使用道具 举报

35

主题

140

回帖

260

VC币

星辰大海

爱の探求者

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
401240

崭露头角活跃达人

waecy  楼主| 发表于 2024-5-17 22:39:32 | 显示全部楼层
tmdtmdtmdqq 发表于 2024-5-17 22:26
批处理+系统自带powershell,带源文件备份功能

刚下载测试了下,发现""没替换「」


点评

ori = original = 原来的  发表于 2024-5-17 22:56
XXX.ori.ass是源文件备份啊,修改后的文件是同名文件啊  发表于 2024-5-17 22:52
「ANCG美好,在于代入角色用心感受,感悟,理解不同世界和与众不同的生存方式。
当了解这段话时,这将成汝之宝藏。」
回复

使用道具 举报

16

主题

293

回帖

504

VC币

白金会员

Rank: 12Rank: 12Rank: 12

积分
55631
StarRingChild 发表于 2024-5-18 13:16:54 | 显示全部楼层
  1. fd -e ass -x sed -i 's/〞\([^〞]*\)〞/「\1」/g'
复制代码

回复

使用道具 举报

18

主题

42

回帖

0

VC币

至尊会员

Rank: 16Rank: 16Rank: 16Rank: 16

积分
223697
klv48384 发表于 2024-5-18 14:21:45 | 显示全部楼层
看到这个(" ")符号 不知道这里有没有 猎户发布组 的组员,希望他们的(" ")也可以换成「」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表