• 締切済み

文字列操作

Visual Basic6.0 よろしくお願いします。 [ab(c123de)f(ghij5)pq] のような文字列から ()で囲まれた文字列(c123de),(ghij5kl) の数字前の c, ghij を消して [ab(123de)f(5klmno)mnopq]にしたい 場合はどうすれば良いでしょうか? 便利な関数や方法がありましたら教えてください。 お願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

正規表現での回答がでて、そちらの方がスマートで良いと思うが、泥臭くやると Sub test02() st = 1 a = "[ab(c123de)f(ghij5)pq](aaa)sd" fnd = "n" '数字を見つけたかどうかのフラグ pp0: p1 = InStr(st, a, "(") If p1 = 0 Then GoTo pp2 '(見つからず最終段階へ 'MsgBox p1 p2 = InStr(st, a, ")") s = s & Mid(a, 1, p1) For i = p1 + 1 To p2 '数字を見つける範囲の繰り返し If fnd = "y" Then s = s & Mid(a, i, 1) GoTo pp1 Else If IsNumeric(Mid(a, i, 1)) Then '数字を見つける fnd = "y" s = s & Mid(a, i, 1) Else End If End If pp1: Next i If fnd = "n" Then s = s & ")" 'MsgBox s st = p2 + 1 '繰り返しの用意 a = Mid(a, st, Len(a) - st + 1) 'MsgBox a fnd = "n" '繰り返しのための初期化 st = 1 GoTo pp0 pp2: s = s & a '(がみつからない段階で最終処理 MsgBox s End Sub テストデータが無いので十分テストできて無いが参考に。

Ksou
質問者

お礼

丁寧なアドバイス、ありがとうございました。(~0~)ノ

すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.1

正規表現オブジェクトを使うのが有効かと思います。 正規表現を使い、"("とその後に続く非数字を"("だけに置換します。 Function Rep(ByVal Txt As String) As String Dim RegExp Set RegExp = CreateObject("VBScript.RegExp") RegExp.Global = True '文中にある一致パターン全てを処理する RegExp.Pattern = "\(\D*" '検索パターン Rep = RegExp.Replace(Txt, "(") End Function 正規表現オブジェクト、正規表現の構文は下記を参照してください。 http://msdn.microsoft.com/ja-jp/library/cc392394.aspx http://msdn.microsoft.com/ja-jp/library/cc392020.aspx

Ksou
質問者

お礼

アドバイスありがとうございました。(~0~)ノ

すると、全ての回答が全文表示されます。

関連するQ&A