以下是用 AutoIt Script 编写的,但问题一般是关于正则表达式的。
Func GetNthValueFromStatubar($n)
; Get status text as string.
$Status = StatusbarGetText($MainWindowTitle)
; Find value based on N.
If $n = 1 Then
$Result = StringRegExp( $Status, "[A-Za-z: ]+\$([A-Z0-9]+)", 1 )
ElseIf $n = 2 Then
$Result = StringRegExp( $Status, "[A-Za-z: ]+\$([A-Z0-9]+)[\s]*[A-Za-z: ]+\$([A-Z0-9]+)", 1 )
ElseIf $n = 3 Then
$Result = StringRegExp( $Status, "[A-Za-z: ]+\$([A-Z0-9]+)[\s]*[A-Za-z: ]+\$([A-Z0-9]+)[\s]*[A-Za-z: ]+\$([A-Z0-9]+)", 1 )
EndIf
Return $Result[$n - 1]
EndFunc
我想消除 if 语句并只编写一个正则表达式检查。为此,我认为第二场和第三场比赛必须是可选的。
我知道我可以通过使用星号 ( *
) 而不是加号 ( ) 来使字符可选+
。然而,当与曲线牙套结合使用时,这似乎不起作用()
。
换句话说,我认为这应该有效,但事实并非如此。它返回零结果,除非N = 3
:
[A-Za-z: ]+\$([A-Z0-9]+)[\s]*[A-Za-z: ]*\$([A-Z0-9]*)[\s]*[A-Za-z: ]*\$([A-Z0-9]*)
如何使第 2 次和第 3 次匹配(其中的部分()
)为可选,以便无论字符串是否包含 1、2 或 3 个匹配项,都可以使用一项检查?