エクセルのVBAの正規表現に関する質問です。

文字列 "123_abcd_fileName123.csv" を ^(.+)_(.+)_(.+)(\d+)\.csv$
のようにして、123,abcd,filename,123 をばらして取り出したいのですが、
できないのでしょうか?
通常の正規表現では当たり前にできるのでできないとは思っていないかったのですが。。。。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/06/21 16:05:14
  • 終了:2009/06/21 17:38:10

ベストアンサー

id:kntr1 No.1

kntr1回答回数82ベストアンサー獲得回数142009/06/21 17:00:33

ポイント35pt

SubMatches コレクションを使って列挙できますよ。

Dim re As RegExp

Dim mc As MatchCollection

Dim m As Match

Dim i As Integer

 Set re = New RegExp

 'アルファベット(大文字)の後に

 'アルファベット(小文字)が複数続く文字列を表す正規表現

 '大文字と小文字を括弧でそれぞれグループ化する

 re.Pattern = "([A-Z])([a-z]+)"

 re.Global = True '複数マッチを有効にする

 Set mc = re.Execute("Book Pen Apple Flower Sea Tree")

 MsgBox "mc.Count = " & mc.Count 'mc.Count = 6

 For i = 0 To mc.Count - 1

  Set m = mc(i)

  MsgBox "FirstIndex = " & m.FirstIndex & " Length = " _

     & m.Length & " Value = " & m.Value & " SubMatches(0) = " _

     & m.SubMatches(0) & " SubMatches(1) = " & m.SubMatches(1)

 Next i

End Sub

http://codezine.jp/article/detail/1655?p=2

id:kaiketsu

submatches というのがあるんですね。

2009/06/21 17:38:02

その他の回答(1件)

id:kntr1 No.1

kntr1回答回数82ベストアンサー獲得回数142009/06/21 17:00:33ここでベストアンサー

ポイント35pt

SubMatches コレクションを使って列挙できますよ。

Dim re As RegExp

Dim mc As MatchCollection

Dim m As Match

Dim i As Integer

 Set re = New RegExp

 'アルファベット(大文字)の後に

 'アルファベット(小文字)が複数続く文字列を表す正規表現

 '大文字と小文字を括弧でそれぞれグループ化する

 re.Pattern = "([A-Z])([a-z]+)"

 re.Global = True '複数マッチを有効にする

 Set mc = re.Execute("Book Pen Apple Flower Sea Tree")

 MsgBox "mc.Count = " & mc.Count 'mc.Count = 6

 For i = 0 To mc.Count - 1

  Set m = mc(i)

  MsgBox "FirstIndex = " & m.FirstIndex & " Length = " _

     & m.Length & " Value = " & m.Value & " SubMatches(0) = " _

     & m.SubMatches(0) & " SubMatches(1) = " & m.SubMatches(1)

 Next i

End Sub

http://codezine.jp/article/detail/1655?p=2

id:kaiketsu

submatches というのがあるんですね。

2009/06/21 17:38:02
id:HALSPECIAL No.2

HALSPECIAL回答回数407ベストアンサー獲得回数862009/06/21 17:10:17

ポイント35pt

SubMatches コレクションを使用します。



Option Explicit
Dim inpStr
inpStr = "123_abcd_fileName123.csv"

Dim oRe, oMatch, oMatches
Set oRe = New RegExp

'oRe.Pattern = "^(.+)_(.+)_(.+)(\d+)\.csv$"
oRe.Pattern = "^(.+)_(.+)_(\D+)(\d+)\.csv$"
Set oMatches = oRe.Execute(inpStr)

If oMatches.Count = 0 Then
	MsgBox "not found"
Else
	Set oMatch = oMatches(0)
	MsgBox oMatch.SubMatches(0)
	MsgBox oMatch.SubMatches(1)
	MsgBox oMatch.SubMatches(2)
	MsgBox oMatch.SubMatches(3)
End If


コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません