1

VB での正規表現の処理に問題があります。私のテキストは:

悲しいことに、現在トロント中央駅にいますが、遅くは未定です

Expresso で正規表現をテストしたところ、目的に合った正規表現が見つかりました。問題は、トロントの主要駅も「Toronto」だけになる可能性があるということです。これが私のパターンです:

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

問題は VB で正規表現を処理することです。これは、パターンで次のような結果が得られるためです。

  • 悲しいことに、現在トロント中央駅にいます 未定
    • 未定
      • トロント
      • 主要
      • 未定
    • 未定
      • トロント
      • 主要
      • 未定 ....

しかし、VB 経由で toronto と main という単語にアクセスすることはできません。また、「未定」を結果の一部にしたくありません。試してみmatch.item(0).submatches.item(0).submatches.item(0)ましたが、試してみると、VBAはすでにエラーをスローし、match.item(0).submatches.item(0).submatchesそのようなオブジェクトがないと述べています-明らかに、それらの「マルチレベル」正規表現の一部を処理できません。サブマッチを 1 つだけ使用する必要があるようにパターンを改善する方法はありますか、または 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) 関心のある部分を一致させたら、さらに分析を実行して、必要なものを取得します。Split()このステップには別の RegEx を使用できますが、区切り文字としてスペースを使用することもできると思います。

于 2012-10-01T10:08:32.470 に答える