Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 具有动态热字符串模块的自动热键变量分配_Regex_Autohotkey - Fatal编程技术网

Regex 具有动态热字符串模块的自动热键变量分配

Regex 具有动态热字符串模块的自动热键变量分配,regex,autohotkey,Regex,Autohotkey,我被指向了允许动态热字符串的自动热键模块 其中一个例子是在键入时计算百分比,例如,5/40%将变为8%。为此,需要以下代码: hotstrings("(\d+)\/(\d+)%", "percent") percent: p := Round($1 / $2 * 100) Send, %p%`% Return 我想用这个模块来代替圆点。中间有点∙ 言简意赅。我已经找到了如何查找文本,但没有找到如何正确替换文本。我需要参考初始文本,以便将其放入替换文本中

我被指向了允许动态热字符串的自动热键模块

其中一个例子是在键入时计算百分比,例如,5/40%将变为8%。为此,需要以下代码:

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