我在VB中处理正则表达式时遇到问题。我的文字是:
遗憾的是目前在多伦多主站未定,
我在Expresso中测试了我的正则表达式,并为我的目的找到了这个正则表达式。事情是:多伦多主站也可以只是“多伦多”。所以这是我的模式:
is sadly currently in (([A-Za-z]*)(\s|-)){1,3}(.|\s)*?undetermined
问题是在VB中处理正则表达式,因为我的Pattern给了我这样的结果:
但我无法通过VB访问多伦多和主要词 - 我也不希望'未确定'成为结果的一部分。我试过match.item(0).submatches.item(0).submatches.item(0)
但是如果我尝试match.item(0).submatches.item(0).submatches
并且声明没有这样的对象,VBA已经抛出错误 - 显然它不能处理那些“多级”正则表达式。有没有办法改进我的模式,以便我只需要使用一个子匹配,或者是否可以通过VBA使用多个子匹配?!
编辑:
GetDelay.Pattern = is sadly currently in (([A-Za-z]*)(\s|-)){1,3}(.|\s)*?undetermined"
GetDelay.IgnoreCase = True
GetDelay.Multiline = True
...
If GetDelay.TEst(MailBody) Then
Set m = GetDelay.Execute(MailBody)
If m.Item(0).SubMatches.Count > 0 Then
OrtBody = m.Item(0).SubMatches.Item(0).SubMatches.Item(0) + " " + m.Item(0).SubMatches.Item(0).SubMatches.Item(1) 'Error 424 comes here - Object required
If GetReason.TEst(AbweichungsmailBody) Then
Set m = GetReason.Execute(AbweichungsmailBody)
If m.Item(0).SubMatches.Count > 0 Then
Reason= m.Item(0).SubMatches.Item(0)
Else
Reason= "Error!"
End If
Else
Reason = "Keine Angabe gefunden!"
End If
Else
thisfunction= False
End If
Else
thisfunction= False
End If
答案 0 :(得分:1)
从重复的子表达式(在您的情况下为(([A-Za-z]*)(\s|-)){1,3}
)捕获结果在任何语言中都会变得棘手。我建议以下作为一种更简单的方法:
1)将您感兴趣的整个部分与简单的正则表达式匹配:
GetDelay.Pattern = "is sadly currently in (.*?) undetermined"
2)一旦你匹配了感兴趣的部分,进行进一步的分析,以获得你想要的。您可以在此步骤中使用另一个RegEx,但我认为您可以Split()
使用空格作为分隔符。