danbooru.donmai.us 不多说了吧,DDDD。
AICG 的时候 danbooru 上图片的 prompt 总是这种样式的? black thighhighs 213k
,整理提示词就很繁琐。老样子分享两个个技巧:
- Sublime Text3 正则表达式去除首尾内容单独提取 danbooru 提示词
- Excel VBS 实现去除首尾内容单独提取 danbooru 提示词
例如:
? 1girl 4.4M
? ass 447k
? black ribbon 88k
? black shorts 64k
? black thighhighs 213k
? breasts 2.5M
上面的内容来自 danbooru 大图提示词,接下来:
Sublime Text3 方式
- 打开 Sublime Text
- 将需要提示词文本复制过来
- 按下
Ctrl+H
,打开搜索功能。 - 勾选左侧的
.*
正则表达式(regular expression)。 - 在 Find 栏中输入正则表达式
^[^\w]+|\s\b\d+(\.\d+)?[kKM]$|[^-\w]+$
- 点击 Replace All 即可。
干净的提示词就提取出来了。
^[^\w]+|\s\b\d+(\.\d+)?[kKM]$|[^-\w]+$
正则表达式包含了三个部分,使用了 |
符号将它们组合在一起,表示匹配任意一个部分。
^[^\w]+
:以一个或多个非单词字符开头,用来匹配行首非单词字符,^
表示行首,[^\w]+
表示匹配一个或多个非单词字符,[]
表示字符集。|\s\b\d+(\.\d+)?[kKM]$
:匹配包含一个数字、一个空白字符和一个单位符号(k、K、M)的字符串,用来匹配数字加单位,|
表示或者,\s
表示匹配任意空白字符,\b
表示匹配一个单词边界,\d+
表示匹配一个或多个数字字符,(\.\d+)?
表示匹配小数部分(可选),[kKM]$
表示匹配单位符号(k、K、M)和行尾。|[^-\w]+$
:以一个或多个非单词字符结尾,用来匹配行尾非单词字符,[^-\w]+
表示匹配一个或多个非单词字符(不包括横线-
),$
表示行尾。
综合起来,这个正则表达式可以匹配以下三种类型的字符串:
- 以一个或多个非单词字符开头的字符串。
- 包含一个数字、一个空白字符和一个单位符号(k、K、M)的字符串。
- 以一个或多个非单词字符结尾的字符串。
例如,下面的字符串都可以被匹配到:
!@$%^
42 k
hello, world!!!
请注意,在实际使用中,这个正则表达式可能需要根据具体的需求进行调整和修改,以便更好地匹配目标字符串。
如果你的提示词是逗号链接的,可以看看这篇《方便整理 AICG 提示词,正则表达式去除提示词逗号及空格》
Excel 方式
另外,如果你觉得使用 Sublime Text3 比较麻烦,你可以使用 excel 的 VBS 功能实现相同功能,具体步骤如下:
- 打开 Excel,并选择包含需要分离的文本的单元格。
- 按下 Alt + F11 打开 Visual Basic Editor 窗口。
- 在菜单栏中,选择 “插入” -> “模块”,以创建一个新的模块。
- 将代码复制并粘贴到模块中。
- 返回 Excel 窗口,并选择需要分离文本的单元格。
- 按下 Alt + F8 打开 “宏” 对话框。
- 选择 “Danbooru 提示词提取” 宏,并单击 “运行” 按钮。
具体 VBS 代码如下:
Sub Danbooru 提示词提取 ()
Dim regEx As Object
Dim strPattern As String
Dim strInput As String
Dim strOutput As String
Dim MyRange As Range
Dim i As Long
' 设置正则表达式模式
Set regEx = CreateObject("VBScript.RegExp")
strPattern = "^[^\w]*|[^\w]*(\d+[.]?\d*)[kKmM]$"
' 应用正则表达式到每个单元格
Set MyRange = ActiveSheet.Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
For Each cell In MyRange
If Not IsEmpty(cell) Then
strInput = cell.Value
' 使用正则表达式替换首尾内容为空字符串
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
strOutput = regEx.Replace(strInput, "")
' 将结果输出到 B 列
i = i + 1
Range("B" & i).Value = strOutput
End If
Next cell
End Sub