1

我在 VB 中处理正则表达式时遇到问题。我的文字是:

遗憾的是目前在多伦多总站未定晚

我在 Expresso 中测试了我的正则表达式,并为我的目的找到了这个正则表达式。事情是:多伦多总站也只能是“多伦多”。所以这是我的模式:

is sadly currently in (([A-Za-z]*)(\s|-)){1,3}(.|\s)*?undetermined

问题是在 VB 中处理正则表达式,因为我的 Pattern 给了我这样的结果:

  • 遗憾的是目前在多伦多总站未确定
    • 未定
      • 多伦多
      • 主要的
      • 未定
    • 未定
      • 多伦多
      • 主要的
      • 未定....

但我无法通过 VB 访问 toronto 和 main 这两个词——我也不希望“未确定”成为结果的一部分。我试过了,但如果我尝试并声明没有这样的对象,match.item(0).submatches.item(0).submatches.item(0)VBA 已经抛出错误- 显然它无法处理一些“多级”正则表达式。match.item(0).submatches.item(0).submatches有没有办法改进我的模式,以便我只需要使用一个子匹配,或者是否可以通过 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
4

1 回答 1

1

从重复的子表达式(在您的情况下(([A-Za-z]*)(\s|-)){1,3})捕获结果在任何语言中都会变得棘手。我建议以下作为一种更简单的方法:

1)用一个简单的正则表达式匹配您感兴趣的整个部分:

GetDelay.Pattern = "is sadly currently in (.*?) undetermined"

2) 一旦你匹配了感兴趣的部分,进行进一步的分析以获得你想要的。您可以在此步骤中使用另一个 RegEx,但我认为您可以只Split()使用空格作为分隔符。

于 2012-10-01T10:08:32.470 回答