从否定设置开始提取文本,直到(但不包括)第一次出现 @
Extract text starting from negated set up til (but not including) first occurance of @
美好的一天社区。
假设我有以下行:
[ ] This is a sentence about apples. @fruit @tag
我希望创建一个可以通用提取部分的正则表达式:
“这是关于苹果的句子。”只有.
即忽略句前的 [ ]
,忽略句后的@fruit @tag
。
到目前为止我得到的是:([^\s*\[\s\]\s])(.*@)
正在创建以下匹配项:
This is a sentence about apples. @fruit @
我如何匹配但不包括第一次出现的 @
符号,同时仍然否定 ([^\s*\[\s\]\s])
组的 [ ]
模式?
编辑: 感谢 Wiktor Stribiżew 提供的重要帮助:
RegExMatch(str, "O)\[\s*]\s*([^@]*[^@\s])", output)
最终代码:
; Zim Inbox txt file
FileEncoding, UTF-8
File := "C:\Users\dragoon\Desktop\anki_cards.txt"
; sleep is necessary
;;Highlight line and copy
#IfWinActive ahk_exe zim.exe
{
clipboard=
sleep, 500
Send ^+c
ClipWait
Send ^{Down}
clipboardQuestion := clipboard
FoundQuestion := RegExMatch(clipboardQuestion,"O)\[\s*]\s*([^@]*[^@\s])",outputquestion)
clipboard=
sleep, 500
Send ^+c
ClipWait
clipboardAnswer := clipboard
FoundAnswer := RegExMatch(clipboardAnswer,"O)\[\s*]\s*([^@]*[^@\s])",outputanswer)
quotedQuestionAnswer := outputquestion[1] """" outputanswer[1] """"
Fileappend, %quotedQuestionAnswer%, %File%
}
它的作用:
在 Zim Wiki 笔记本中,在 Windows 上,按 Win+V 热键在问题上?在以下结构中:
[ ] Question Header
[ ] Question?
[ ] Answer about dogs @cat @dog
这将导致文本在外部文件中被格式化:
Question?"Answer about dogs"
这是Anki卡片导入可接受的格式,可用于快速从复习结构中制作卡片。再次感谢您对我的第一个 SO 问题的所有帮助。
您可以使用
\[\s*]\s*\K[^@]*[^@\s]
见regex demo。 详情:
\[\s*]\s*
- [
,零个或多个空格,]
,零个或多个空格
\K
- “忘记”刚刚匹配的内容
[^@]*
- @
以外的零个或多个字符
[^@\s]
- @
和空格以外的字符。
请注意,在 AutoHotKey 中,如果使用 对象模式:
,您还可以 捕获 匹配的部分
RegExMatch(str, "O)\[\s*]\s*([^@]*[^@\s])", output)
您要使用的字符串是使用第 1 组模式(用一对未转义的括号定义的)捕获的,您可以通过 output[1]
访问它。见 documentation:
Object mode. [v1.1.05+]: This causes RegExMatch() to yield all information of the match and its subpatterns to a match object in OutputVar. For details, see OutputVar.
美好的一天社区。
假设我有以下行:
[ ] This is a sentence about apples. @fruit @tag
我希望创建一个可以通用提取部分的正则表达式: “这是关于苹果的句子。”只有.
即忽略句前的 [ ]
,忽略句后的@fruit @tag
。
到目前为止我得到的是:([^\s*\[\s\]\s])(.*@)
正在创建以下匹配项:
This is a sentence about apples. @fruit @
我如何匹配但不包括第一次出现的 @
符号,同时仍然否定 ([^\s*\[\s\]\s])
组的 [ ]
模式?
编辑: 感谢 Wiktor Stribiżew 提供的重要帮助:
RegExMatch(str, "O)\[\s*]\s*([^@]*[^@\s])", output)
最终代码:
; Zim Inbox txt file
FileEncoding, UTF-8
File := "C:\Users\dragoon\Desktop\anki_cards.txt"
; sleep is necessary
;;Highlight line and copy
#IfWinActive ahk_exe zim.exe
{
clipboard=
sleep, 500
Send ^+c
ClipWait
Send ^{Down}
clipboardQuestion := clipboard
FoundQuestion := RegExMatch(clipboardQuestion,"O)\[\s*]\s*([^@]*[^@\s])",outputquestion)
clipboard=
sleep, 500
Send ^+c
ClipWait
clipboardAnswer := clipboard
FoundAnswer := RegExMatch(clipboardAnswer,"O)\[\s*]\s*([^@]*[^@\s])",outputanswer)
quotedQuestionAnswer := outputquestion[1] """" outputanswer[1] """"
Fileappend, %quotedQuestionAnswer%, %File%
}
它的作用: 在 Zim Wiki 笔记本中,在 Windows 上,按 Win+V 热键在问题上?在以下结构中:
[ ] Question Header
[ ] Question?
[ ] Answer about dogs @cat @dog
这将导致文本在外部文件中被格式化:
Question?"Answer about dogs"
这是Anki卡片导入可接受的格式,可用于快速从复习结构中制作卡片。再次感谢您对我的第一个 SO 问题的所有帮助。
您可以使用
\[\s*]\s*\K[^@]*[^@\s]
见regex demo。 详情:
\[\s*]\s*
-[
,零个或多个空格,]
,零个或多个空格\K
- “忘记”刚刚匹配的内容[^@]*
-@
以外的零个或多个字符
[^@\s]
-@
和空格以外的字符。
请注意,在 AutoHotKey 中,如果使用 对象模式:
,您还可以 捕获 匹配的部分RegExMatch(str, "O)\[\s*]\s*([^@]*[^@\s])", output)
您要使用的字符串是使用第 1 组模式(用一对未转义的括号定义的)捕获的,您可以通过 output[1]
访问它。见 documentation:
Object mode. [v1.1.05+]: This causes RegExMatch() to yield all information of the match and its subpatterns to a match object in OutputVar. For details, see OutputVar.