アプリ版:「スタンプのみでお礼する」機能のリリースについて

vbaで複数行のデータの一部を抜き出そうと思っています。
下記のようにすると、抜き出したデータの先頭に改行がついてしまいます。
何かいい方法はないでしょうか。


data = "start" & vbCrLf  & "ABC" & vbCrLf & "DEF" & vbCrLf & "GHI" & vbCrLf & "end"

Set re = New RegExp

re.Pattern = "start((.|\n)*?)end"

re.MultiLine = True

Set mc = re.Execute(data)

For i = 0 To mc.Count - 1

MsgBox m.SubMatches(0)

Next i


上記を実行すると

vbCrLf  & "ABC" & vbCrLf & "DEF" & vbCrLf & "GHI" & vbCrLf

となってしまいます。

”ABC”から抜き出す場合、正規表現をどう書けばいいのでしょうか。
よろしくお願いします。

A 回答 (2件)

こんにちは。



vbCrLfを表すパターンは、
 \r\n
です。

Sub Re8780307()
Dim re As VBScript_RegExp_55.RegExp
Dim mc As VBScript_RegExp_55.MatchCollection
Dim m As VBScript_RegExp_55.Match
Dim Data
  Data = "start" & vbCrLf & "ABC" & vbCrLf & "DEF" & vbCrLf & "GHI" & vbCrLf & "end" & vbCrLf & _
    "start" & vbCrLf & "JKL" & vbCrLf & "MNO" & vbCrLf & "PQR" & vbCrLf & "end"
  
  Set re = New RegExp
  re.Global = True
  re.MultiLine = True
  re.Pattern = "start(\r\n((.|\r\n)*?)\r\n)end"
  
  Set mc = re.Execute(Data)
  For Each m In mc
    Debug.Print "■"; m.SubMatches(1); "■"
  Next
End Sub

みたいなことをなさりたいのでは?
    • good
    • 1
この回答へのお礼

ありがとうございます。

すっかり、「¥r」の存在を忘れていました。
たぶん、これでスッキリ解決だと思います。
今からテストしてみます。

お礼日時:2014/10/06 20:23

> re.Pattern = "start((.|\n)*?)end"


ここでstartの後の改行をかっこの外に出しておくべきなのでは?
re.Pattern = "start\n((.|\n)*?)end"
    • good
    • 0
この回答へのお礼

ありがとうございます。

今回、質問に書いたプログラムと、実際のプログラムは少し違います。
プログラムの一部を、簡略化しています。

実際は、正規表現でマッチしたのを、分割してコレクションに入れています。
その分割したデータを、再分割するところのプログラムが、今回質問したところです。

そこでは、なぜか正規表現がうまくマッチしません。

>re.Pattern = "start\n((.|\n)*?)end"

これも試してみましたが、startの文字を入れるとマッチしなくなります。
どうも、コレクションの挙動がおかしいので、その辺から見直してみます。
ありがとうございました。

お礼日時:2014/10/06 07:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています