2011-10-24 7 views
1

アクセスvbaで正規表現を使用して複数の区切り文字を分割する方法がわかりました。私は文字列を "これは本当に厄介な"と言い、パイプ(; |)で区切られたユーザー定義区切り文字を使用して、 "This"、 "is"、 "really:迷惑 "私は何をしても、私はこれを働かせることはできません。 Pythonでは、私はre.splitを使うだけですが、vbaには私が知っているようなオプションはありません。私は試したコードを投稿しました:正規表現を使用してアクセスvbaで複数の区切り文字を分割する方法

Private Sub Splitter(ByVal UnmodText As String, ByVal SplitDelimiters As String) 
    Dim SplitExp As New RegExp 
    Dim SplitMatches As MatchCollection 
    Dim SplitMatch As Match 
    SplitExp.IgnoreCase = True 
    SplitExp.Global = True 
    'SplitExp.Pattern = ".(" & SplitDelimiters & ")" & "|(?<=" & SplitDelimiters & ").$" 
    'SplitExp.Pattern = ".{0,}(?=(" & SplitDelimiters & "))" 
    SplitExp.Pattern = "(?!(" & SplitDelimiters & "){2})" 
    MsgBox SplitExp.Pattern 
    Set SplitMatches = SplitExp.Execute(UnmodText) 
    For Each SplitMatch In SplitMatches 
     MsgBox SplitMatch.Value 
    Next 
End Sub 

ご協力いただけると助かります。

+0

あなたは[文字クラス](http://www.regular-expressions.info/charclass.html)の使用を検討しましたか? – Nate

+0

すべてを置換する "、" with ";" ";"に分割? –

答えて

3

これは分割する文字列とパイプ区切りの区切り文字を含む文字列を指定してバリアント配列を返します。

Function SplitPlus(val As String, seps As String) As Variant 
    Dim x As Integer, arrSeps As Variant 
    Dim lb As Integer, ub As Integer 

    arrSeps = Split(seps, "|") 
    lb = LBound(arrSeps) 
    ub = UBound(arrSeps) 

    If ub > lb Then 
     For x = lb + 1 To ub 
      val = Replace(val, arrSeps(x), arrSeps(lb)) 
      'Debug.Print val 
     Next x 
    End If 
    SplitPlus = Split(val, arrSeps(lb)) 
End Function 
+0

この機能をご利用いただき、ありがとうございます。配列の代わりにコレクションを返すようにしたのは、コレクションがプリミティブなPythonリストに似ていることを考慮して扱いやすくなっているからです。 – THX1138

関連する問題