以下內容是用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