• ベストアンサー

パスの中から数字だけ抽出させたいのですがいい方法はないでしょうか?

パスの中から数字だけ抽出させたいのですがいい方法はないでしょうか? VB.NETにて書いております。(VWD2008) たとえば strPath = "C:\wwwroot\hoge\hoge20100604hoge.txt" なんていう風にあったときその中から「20100604」だけ抽出できないでしょうか? パスの長さが固定長ではないため普通の切り抜きに使う関数が使用できず困っています。 どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

正規表現は複雑ですが、利用できるようになると便利です。 私も完全ではないので、正規表現を利用する場合は、調べながら利用しています。 http://dobon.net/vb/dotnet/string/regexmatch.html Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click   Dim strPath As String = "C:\wwwroot\hoge\hoge20100604hoge.txt"   '拡張子無しのファイル名   Dim l_strName As String = IO.Path.GetFileNameWithoutExtension(strPath)   'ファイルの数字要素の取得   Dim l_aryNums As ArrayList = GetNumsAry(l_strName)   Select Case l_aryNums.Count     Case 0       'ファイル名に数字要素がない     Case 1       'ファイル名に数字要素が1個ある     Case Else       'ファイル名に数字要素が複数ある   End Select End Sub Private Function GetNumsAry(ByVal p_strValue As String) As ArrayList   Dim l_retAry As New ArrayList()   Dim l_matchs As RegularExpressions.MatchCollection = RegularExpressions.Regex.Matches(p_strValue, "(\d)+")   For Each l_match As RegularExpressions.Match In l_matchs     l_retAry.Add(l_match)   Next   Return l_retAry End Function

mr-r00
質問者

お礼

正規表現という方法を利用すればいいんですね 大変参考になりました ありがとうございます

その他の回答 (2)

noname#256686
noname#256686
回答No.2

なにかうまい方法があるのかも知れませんが、私ならあーだこーだ調べるよりも下記のような関数を作っちゃいますね。 Private Function GetNumeric(strPath As String) Dim i As Integer, strCHR As String, strOutput As String For i = 1 To Len(strPath) strCHR = Mid(strPath, i, 1) If IsNumeric(strCHR) Then strOutput = strOutput & strCHR End If Next GetNumeric = strOutput End Function

mr-r00
質問者

お礼

ありがとうございました たいへんさんこうになりました

  • Gab_km
  • ベストアンサー率40% (20/50)
回答No.1

固定長の文字列ではありませんが、strPathは自身の長さを知っているはずなので、 その長さを超えないように1文字ずつ見ていくことはできると思います。

mr-r00
質問者

お礼

ありがとうございました

関連するQ&A