【发布时间】:2013-04-19 00:18:05
【问题描述】:
以下是用 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]*)
如何使第二个和第三个匹配项,() 中的部分,可选,以便无论字符串包含 1、2 还是 3 个匹配项,都可以使用一次检查?
【问题讨论】:
-
您可能想提供一些示例来说明这些正则表达式应该匹配的内容。
-
你可以试试
a((b)?(c)?)?