14

VBA正規表現で否定的および肯定的な後読みを行う方法はありますか?

文字列が「A」で始まる場合は一致させたくないので、現在、パターンの先頭で ^A を実行してから、match(0) の最初の文字を削除しています。明らかに最善の方法ではありません!

regExp オブジェクトを使用しています。

4

2 に答える 2

13

VBAは、ポジティブとネガティブの先読みを提供しますが、一貫性のない後読みはありません。

私が見たVBAで正規表現を使用する最良の例は、PatrickMatthewsによるこの記事です。

Execute[ではなくを使用して例を更新Replace]

私はあなたの使用法について完全には明確ではありませんが、あなたはこのような関数を使用することができます

  • Aで始まる単語をスキップします
  • それで始まらないすべての単語については、2番目の文字以降のすべてを返します(サブマッチを使用-内部のパターンで(あり、)サブマッチ1-

    Sub TestString()
    MsgBox ReducedText("cfat dcat")
    MsgBox ReducedText("Sat all over the hat again")
    End Sub
    
    
    Function ReducedText(strIn As String) As String
    Dim objRegex As Object
    Dim objRegMC As Object
    Dim objRegM As Object
    Dim strOut As String
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
      .IgnoreCase = True
      'not needed if matching the whole string
      .Global = True
      .Pattern = "\b[^a\s]([a-z]+)"
      If .test(strIn) Then
          Set objRegMC = .Execute(strIn)
          For Each objRegM In objRegMC
            strOut = strOut & objRegM.submatches(0) & vbNewLine
          Next
          ReducedText = strOut
      Else
        ReducedText = "Starts with A"
      End If
    End With
    End Function
    
于 2012-02-06T01:07:14.580 に答える
0

キャプチャされていないグループに ^A を配置し、Match オブジェクトの SubMatches プロパティを使用して一致した値を取得するのはどうですか?

于 2012-02-05T16:50:25.570 に答える