唐库编辑器的查找替换可以调用AI,还可以预览替换:
1)预览替换功能,可以在替换前先预览一下,尤其使用正则表达式替换时有必要,避免出错;
2)AI替换功能,查找一个词条,用AI处理该词条,替换为AI处理的结果;
3)词条转换功能(例如转大写,转小写)。
1,正则表达式分组概念
要使用AI替换功能,需先了解正则表达式分组概念,不要害怕正则,现在什么都可以问AI了。
先看最简单的:
想把 123abc
中的字母数字顺序掉转,操作如下:
查找 123abc
替换为 abc123
就可以了。
但看起来毫无意义,还不如打字快,再看如下操作:
查找 (123)(abc)
选中支持正则,替换为 $2$1
,发现真的替换为 abc123
了!
为什么呢?
小括号就是正则表达式的分组, (123)
是第1分组,在替换里用 $1 代表, (abc)
是第2分组,在替换里用 $2 代表,$2$1
自然就将顺序调转了。
但这样看好像意义也不大,只能调转123abc
啊?
再变形一下:查找 ([0-9]+)([a-z]+)
替换 $2$1
不变,这是什么含义呢?[0-9]
:表示0-9中间的任意数字字符;[a-z]
:表示a-z中间的任意字母字符;+
:表示重复前面的字符1-n个
这个式子就强大了,它能将所有数字在前字母在后的字符串掉转。
2,AI替换功能:
查找一个词条,用AI处理该词条,然后替换或补充AI处理的结果,AI是无所不能的,这也意味着唐库的查找替换无所不能,而且是批量的。
还是从最简单说起:
文章中有一些英文名字,想在其后补充“(中文名字)”,例如John
,变为John(约翰)
,在唐库中如下操作:
查找:(?<ai_input>John)
Prompt:$ai_input,请翻译前面的词条为中文,人名地名参照最常见的中文翻译,请返回译文,不要加多余的话。
替换:$ai_input($ai_created)
执行替换之后,John
真的变为John(约翰)
解释如下:
命名分组:第1节说了正则表达式中小括号代表分组,(?<ai_input>...)
叫做命名分组,ai_input就是这个分组的名字,分组有了名字就不用去数序号了。名字可以任取,字母数字均可以,例如可以是(?<xxx>...)
;
AI命名分组:唐库规定,凡是名字前面有“ai”前缀的,叫做AI命名分组,需要调用AI处理该词条。通过Prompt,将该词条输入AI,Prompt中的$ai_input
变量,代表名字叫做ai_input的分组的内容;唐库使用ai_input作为默认分组名,意思是这个分组是AI的输入;
替换串:$ai_input
代表名字叫做ai_input的分组内容,$ai_created
代表AI生成的内容,注意:替换串中的括号就是括号,没有分组概念。
下面举个更复杂的例子:
你是一个数学老师,学生做了100道题,想让AI帮忙批改,举例1个题目如下:
问题:有大小形状相同的3 个红色小球和5 个白色小球,排成一排,共有多少种不同的排列方法?
答:因为是8 个小球的全排列,所以共有8!,共40320种排法。
用唐库的AI查找替换来解决如下:
查找:问题:(?<ai_input>.+)\n答:(?<ai_input2>.+)
Prompt:【$ai_input】是一个数学问题,【$ai_input2】是学生答案,请判断答案是否正确,如不正确简要给出正确解法。返回格式:正确/不正确,正确解法限定100字以内,不要加多余的话。
替换:问题:$ai_input\n答:$ai_input2\n批:$ai_created
执行替换之后获得结果如下(AI选择默认的Deepseek即可):
问题:有大小形状相同的3 个红色小球和5 个白色小球,排成一排,共有多少种不同的排列方法?
答:因为是8 个小球的全排列,所以共有8!,共40320种排法。
批:不正确,正确解法是8!/(3!5!)=56种。
是不是很神奇?100个学生的100道题,批改瞬间完成。解释:问题:(?<ai_input>.+)\n
:.
表示除了换行以外的任意字符,+
表示1-多个重复,尽量多匹配,这个分组把”问题“后面换行之前的内容全匹配了;\n
:换行符号;答:(?<ai_input2>.+)
:这个分组把“答”字后面的内容全匹配了(直到遇到换行符)。
这个例子定义了两个ai分组,在Prompt中可以分别引用。
这个例子可看出,发挥你的聪明才智,唐库的查找替换能做任何事情。
3,词条转换功能
假设文章里有很多小写英文单词,每行一个:
查找:(?<toupper>.+)
替换:$1,$@1
预览替换:
预览替换,找到 7 处:
11 | 1行 || shade
11 | 1行 || shade,SHADE
11 | 3行 || ruffle
11 | 3行 || ruffle,RUFFLE
小写英文单词被转为大写,解释:
toupper:唐库特殊命名,将分组内容转为大写;
$@1:第1分组经过唐库处理后的内容
类似上面toupper这样的预定义名称唐库还有:
1)tolower 转小写功能
2)toupper 转大写功能
3)index 返回连续序号12345
4)indexcn 返回连续序号一二三四五
5) len 返回捕获组匹配的字符的个数
4,查找替换换行符的问题
\n代表换行符,可在替换内容中使用\n即可。
当查找串中不含\n时,唐库按行内容查找,正则表达式中的 ^,$ 匹配每一行的开头及末尾。
当查找串中含\n时,唐库按文章内容查找,正则表达式中的 ^,$ 匹配整篇文章的开头及末尾。
注意唐库中有两种空格“ ”(ascii码32,真空格), “ ”(ascii码160, 不间断空格,由html的
转换而来),查找时是区别对待的。
5,常用高级功能:查找未配对的tag<tang1>(?!(?:(?!<tang1>).)*</tang1>)
可用于查找未配对的<tang1>
查找串(<tang1>[^<]*)(?!(?:(?!<tang1>).)*</tang1>)
替换串$1</tang1>
可用于将未配对的<tang1>
配对,不过要求<tang1>...</tang1>
中间无其它tag。
双语文档查找无译文的段落:\n\n((?!.*<tang1>).+\n)+\n
如果去掉图片段落:\n\n[^!]((?!.*<tang1>).+\n)+\n
6,支持如下高级用法:
占有式匹配 (Possessive match) (?>re)
正向预查 (Positive lookahead) (?=re)
负向预查 (Negative lookahead) (?!re)
正向后行断言 (Positive lookbehind) (?<=re)
负向后行断言 (Negative lookbehind) (?<!re)
反向引用 (Back reference) \1
命名反向引用 (Named back reference) \k’name’
条件判断 (Conditionals) (?(expr) yes|no)