Regex 具有动态热字符串模块的自动热键变量分配
我被指向了允许动态热字符串的自动热键模块 其中一个例子是在键入时计算百分比,例如,5/40%将变为8%。为此,需要以下代码:Regex 具有动态热字符串模块的自动热键变量分配,regex,autohotkey,Regex,Autohotkey,我被指向了允许动态热字符串的自动热键模块 其中一个例子是在键入时计算百分比,例如,5/40%将变为8%。为此,需要以下代码: hotstrings("(\d+)\/(\d+)%", "percent") percent: p := Round($1 / $2 * 100) Send, %p%`% Return 我想用这个模块来代替圆点。中间有点∙ 言简意赅。我已经找到了如何查找文本,但没有找到如何正确替换文本。我需要参考初始文本,以便将其放入替换文本中
hotstrings("(\d+)\/(\d+)%", "percent")
percent:
p := Round($1 / $2 * 100)
Send, %p%`%
Return
我想用这个模块来代替圆点。中间有点∙ 言简意赅。我已经找到了如何查找文本,但没有找到如何正确替换文本。我需要参考初始文本,以便将其放入替换文本中。在上面的代码中,使用p:=Round$1/$2*100使用输入的数字来计算百分比,但我不知道如何对字母执行相同的操作
我的代码如下:
hotstrings("[a-z]\.[a-z](\.[a-z])*", "word")
word:
a := $1
b := $2
Send, a{U+22C5}b
Return
但这只是用一个中间点替换了整个内容,并没有替换周围的字母。此外,我不知道如何考虑多点A.B.C.D的可能性。在python中,我会做一个for循环,但我真的不知道AutoHotKey
我该怎么做
谢谢这里没有什么问题
第一个是正则表达式。
首先,你不会真的想把正则表达式想象成是在匹配一个无限长的a.b.c.d.e.f.g.h.i.j.k.l。。。。相反,你只需要考虑一个案例x.y.这些案例可以紧挨着彼此。
所以去掉\[a-z]*
其次,你没有捕获组。或者,你确实有一个在里面,但我想你是无意中做的。如果您还不熟悉正则表达式捕获组,我建议您学习它们,它们在这里这样的特定情况下非常有用!。
但无论如何,要创建捕获组,您只需将要捕获的正则表达式部分放在周围。
因此,您希望捕获游戏前后的角色。或者,实际上,只有后一种,这种方法会有问题,以后会有更多的问题。所以你的正则表达式现在看起来像这样:
[a-z]\[a-z]
匹配后,hotstrings函数将输出两个变量,$1和$2,这就是所有变量的名称。
当您引用变量时,$1给出的字符位于.,而$2给出的字符位于
现在我们讨论第二个问题,涉及到捕获组变量
a := $1
b := $2
Send, a{U+22C5}b
在这里,您无缘无故地创建变量a和b,虽然这当然不是问题,但是如何引用变量a和b是一个问题。
您使用的是send命令,因此使用的是传统的AHK语法。在旧式AHK语法中,通过将变量包装在%%中来引用变量。
因此,您的send命令如下所示:
发送%a%{U+22C5}%b%
但是,即使hotstrings函数完全是遗留AHK,也不要编写遗留AHK。
要切换到现代的AHK表达式语法,我们需要指定一个后跟空格的%。然后我们可以这样做:
SendInput,%$1{U+22C5}$2
还跳过了对无用变量a和b的定义,并进行了切换,因为这是推荐的更快、更可靠的发送模式
现在有了这样一个几乎可以正常工作的脚本:
hotstrings("([a-z])\.([a-z])", "word")
return
word:
SendInput, % $1 "{U+22C5}" $2
Return
它只会有链接多个a.b.c.d.e.f.g.的问题。。。工作不太好。但这很好,因为正则表达式可以做更多的改进
我们希望使用积极的向后看,只捕获后面的角色。像这样:
?
hotstrings("(?<=\w)\.(\w)", "word")
return
word:
SendInput, % "{U+22C5}" $1
Return