- ベストアンサー
パスの中から数字だけ抽出させたいのですがいい方法はないでしょうか?
パスの中から数字だけ抽出させたいのですがいい方法はないでしょうか? VB.NETにて書いております。(VWD2008) たとえば strPath = "C:\wwwroot\hoge\hoge20100604hoge.txt" なんていう風にあったときその中から「20100604」だけ抽出できないでしょうか? パスの長さが固定長ではないため普通の切り抜きに使う関数が使用できず困っています。 どうかよろしくお願いします。
- みんなの回答 (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
その他の回答 (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
お礼
ありがとうございました たいへんさんこうになりました
- Gab_km
- ベストアンサー率40% (20/50)
固定長の文字列ではありませんが、strPathは自身の長さを知っているはずなので、 その長さを超えないように1文字ずつ見ていくことはできると思います。
お礼
ありがとうございました
お礼
正規表現という方法を利用すればいいんですね 大変参考になりました ありがとうございます