下面是我对脚本进行检查的脚本的缩短版本,标题中的数字决定了发送的文本。
我想知道我是否可以合并这些数字的数组,而不是拥有越来越大的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
答案 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)) {
; ...
}