以下内容是用AutoIt脚本编写的,但问题一般是关于正则表达式。如何进行可选匹配?
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]*)
我怎样才能使第二和第三场比赛,内()
零件,可选的,所以一个检查可以不管使用的字符串是否包含1,2 ,还是3场比赛?
您可能要提供什么样这些正则表达式都应该是匹配的一些例子。 – 2013-04-25 07:48:24
你可以尝试类似'a((b)?(c)?)?' – HamZa 2013-04-25 07:50:02