AutoHotkey:正则表达式匹配窗口标题有几十种变体

时间:2017-05-03 22:10:46

标签: regex autohotkey

下面是我对脚本进行检查的脚本的缩短版本,标题中的数字决定了发送的文本。

我想知道我是否可以合并这些数字的数组,而不是拥有越来越大的if / else语句,但仍然可以准确地检查Windows标题。

Loop
{
WinWait, Windows security
WinGetTitle, Title, A
WinGetClass, Class, A
if (RegExMatch(Title, "Windows security: ") AND (Class == "Transparent Windows Client") OR RegExMatch(Title, "Windows security: ") AND (Class == "#32770")) 
{
    if (RegExMatch(Title, "Windows security: (049|064|067|071|077|158|193|210|214|215|221|224|239|... ENHANCE)+.*(POR|R.|WS.)+") AND (Class == "Transparent Windows Client") OR RegExMatch(Title, "Windows security: (049|064|067|071|077|158|193|210|214|215|221|224|239|... ENHANCE)+.*(POR|R.|WS.)+") AND (Class == "#32770"))
        {
        Send ExampleText{Enter}
}
}}
return

1 个答案:

答案 0 :(得分:1)

假设您的有效数字数组设置如下

validNumbers := [ "049", "064", "067" ] ; etc..

您可以分两步拆分该RegEx语句,从而使用数组:

valid:=false
for i,v in validNumbers ; there is no such thing as "if x in [...]" - http://stackoverflow.com/a/33593563/3779853
    if(inStr(Title,v))
        valid:=true
if(valid) {
    if(RegExMatch(Title, "Windows security: [0-9]+.*(POR|R.|WS.)+")) {
        ; ...
    }
}

当其中一个数字包含在标题的某个位置时,这只会匹配"任意数字" -regex。

另一种方法可能是手动构建大型正则表达式:

regex := "Windows security: ("
for i,v in validNumbers
    regex .= v "|"
regex .= ")+.*(POR|R.|WS.)+"
if(RegExMatch(Title, regex)) {
    ; ...
}