satan53x / SExtractor

从GalGame脚本提取和导入文本
GNU General Public License v3.0
226 stars 15 forks source link

关于SE二次提取json去除非文本代码 #59

Closed JassNull closed 7 months ago

JassNull commented 7 months ago

用VNT等其他工具提取的json的message里有非文本代码,想问下能否用SE写正则过滤掉,翻译完再把代码导入原位置 (本来打算摆烂直接丢进去翻的,结果代码丢失概率有点高) 代码有以下俩位置 "message": "代码A「游戏文本」" "message": "「代码B游戏文本」"

satan53x commented 7 months ago

选择引擎JSON进行提取就行。 专门对读取[{name,messageRN}]做了处理,默认会保持name。捕获分组全用unfinish。

satan53x commented 7 months ago

比如最简单的,控制代码全是半角字符的情况:

"message": "开始<font>中间</font>结束"

使用类似正则即可:(自行添加需要排除的字符)

10_search=(?P<unfinish>[^a-zA-Z0-9<>/]+)
satan53x commented 7 months ago

复杂一点,但是控制代码有明确分界字符的(比如尖括号<>,只需要提取<>之外的文本),也可以使用|进行匹配。

10_search=([^<>]+)$|(?P<unfinish>[^<>]+)<
JassNull commented 7 months ago

尝试试了几次,老是少几十句话 控制代码都是“@+1~n个字母+1~n个数字”的数个组合 类似 @t33@d1 @t46@d1@t64@d2 @t45@d1@t115@d2 @t11@d1@t56@d2@t58@se218@t60@se218

satan53x commented 7 months ago

看描述不清楚什么问题,缺少的文本和其他文本有什么区别吗? 总之JSON引擎只会匹配key:value的value字符串内容,正则只需要按value匹配就行。

JassNull commented 7 months ago

感谢,解决了

JassNull commented 7 months ago

哦对,还有二次提取的时候应该是要把段落分隔符留空的吧?不留空会在原代码位置加上换行符

satan53x commented 7 months ago

那个是分隔符不能置空,不然写回去的时候不知道译文怎么分开的。

JassNull commented 7 months ago

所以说译文也需要保证SE插入的换行符存在是吧?是的话我就在翻译前替换成gpt不容易丢翻的符号了

satan53x commented 7 months ago

恩,分隔符只要和被提取对象内容不同就行,也就是说你之前的json如果有\r\n的话,二次提取就用其他字符串。

JassNull commented 7 months ago

好,感谢,应该没问题了