VB2010正規表現で複数の拡張子から一番最後の拡張子を取り出す方法
- VB2010の正規表現を使用して、ファイル名に複数のドット(ピリオド)が含まれる場合や、複数の拡張子がある場合でも、一番最後の拡張子だけを取り出す方法を教えてください。
- System.Text.RegularExpressions.Regexを使用して正規表現を指定していますが、現在の方法では一部の文字も一緒に取り出されてしまいます。
- 上記の正規表現の書き方がどうしてダメなのか、また正しい正規表現の書き方や代替案を教えてください。
- ベストアンサー
VB2010の正規表現
VB2010の正規表現についての質問です。 ファイル名に複数のドット(ピリオド)が含まれる時や、複数の拡張子がある時でも、 一番最後にある拡張子だけを取り出したいのです。 System.Text.RegularExpressions.Regex("正規表現") で正規表現を指定していますが、 例えば、『T.M.Revolution.m3u』の場合は、『.m3u』だけを取り出したいので、 ("[.].*$") とすると、マッチする部分が『.M.Revolution.m3u』となる為、 ("([.].*){1}$") に、試しに変更してみましたが、失敗してしまいました。 知っている方、 『上記の書き方だと何故ダメなのか』 と、 『この場合の正しい正規表現』 を教えていただけませんか? あと、正規表現ではない代替案などが有れば、是非それも教えて頂きたいです。 よろしくお願いします。
- hatopo7979
- お礼率35% (10/28)
- Visual Basic
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
正規表現なんて使わなくても、 dim hoge as string = "T.M.Revolution.m3u" dim extension as string = hoge.Substring(hoge.LastIndexOf(".")) とかでいいんではないでしょうか。 もしくはPath.GetExtension()を利用して imports System dim hoge as string = "T.M.Revolution.m3u" dim extension as string = Path.GetExtension(hoge) みたいな。
その他の回答 (1)
- guci-ok
- ベストアンサー率33% (49/146)
VB知らないのに、済みません。 普通の正規表現では、 (¥.¥w+)$ ピリオドの後に英数字が幾つかあって終わり。
関連するQ&A
- .NET のスマートな正規表現の記述の仕方
VB8 (2005)で、正規表現の書き方ですが、抽出する場合は、 以下のようにしましたが、抽出せず、単にマッチしたかとうが If文で判別する方法が知りたいです。 Imports System.Text.RegularExpressions '正規表現 Dim dat As String = "TEST 01" Dim ptn As String 'パターン Dim r As Regex ' Dim dv As String '部分 '抽出 ptn = "^TEST ([0-9]+)$" r = New Regex(ptn, RegexOptions.IgnoreCase) For Each m As Match In r.Matches(dat) dv = m.Groups(1).Value() MsgBox("抽出=[" & dv & "]") Next あと、上のようにFor文で回していますが、Globalでなく、今回は1つだけの抽出で、しかも1つだけの()なので、これをFor文を使わずに直接取得する書き方はあるのでしょうか? それ以前に、.NETの正規表現の書き方が一般的でなければ、ご指導お願い致します。
- ベストアンサー
- Visual Basic
- VB.NETの正規表現の書き方を教えてください
いつもお世話になっております。 また正規表現がわからなくなってしまったのですが、 お助け願えないでしょうか。 Strの中にはこのようなものが入っています。 Str="あいうえお=====かきくけこ=====さしすせそたちつてと=====まみむめも=====なにぬねの" Dim r As Regex Dim m As Match Dim StrR As String r = New Regex("=====.+=====") m = r.Match(Str) While m.Success StrR = m.Value m = m.NextMatch() End While 順番に StrR="=====かきくけこ=====" StrR="=====まみむめも=====" を取得したいのですが、 上記のような書き方だと、 StrR=====かきくけこ=====さしすせそたちつてと=====まみむめも=====" を取得してしまいます。 回数の指定など色々試してはみたのですが、 どうしても目的のとおりにすることができず困っておりまして、 書き方をご教示頂きたくよろしくお願い致します。
- ベストアンサー
- Visual Basic
- 正規表現を教えてください。
正規表現を教えてください。 C#で正規表現を用いた文字列検索を勉強中なのですが、うまくマッチさせることができません。教えていただけないでしょうか。 検索対象の文字列は下のようになります。 キーワード;値; 文字列中に該当するキーワードが存在する場合に、その値を取得するプログラムを考えています。しかし、私の正規表現では2つ目の「;」を検出してしまい、キーワードのみを取得することが出来ずに困っています。 見当違いの表記をしているとは思うのですがどなたかお助けください。 match = Regex.Match(line, "^(.*);"); C#初心者なものです。
- ベストアンサー
- Microsoft ASP
- 日付の正規表現
C#で日付の正規表現をしておりますが、全角括弧((3))の処理がうまく行えずに 困っております。 下記のいずれかにマッチすればエラーメッセージを表示させないと言う処理を行っています。 マッチさせたいパターン (1)2011/01/01 (2)2011/01/01(月) ※半角カッコ (3)2011/01/01(月) ※全角カッコ (1)\d{4}/\d{1,2}/\d{1,2} (2)\d{4}/\d{1,2}/\d{1,2}\([月火水木金土日]\) (3)\d{4}/\d{1,2}/\d{1,2}([月火水木金土日]) if (System.Text.RegularExpressions.Regex.IsMatch( TextBox1.Text, @"\d{4}/\d{1,2}/\d{1,2}") || System.Text.RegularExpressions.Regex.IsMatch( TextBox1.Text, @"\d{4}/\d{1,2}/\d{1,2}\([月火水木金土日]\)") || System.Text.RegularExpressions.Regex.IsMatch( TextBox1.Text, @"\d{4}/\d{1,2}/\d{1,2}([月火水木金土日]") ) }else{ MessageBox.Show("エラー"); } お分かりの方がいらっしゃいましたらご教授頂けないでしょうか。 よろしくお願い致します。
- 締切済み
- Visual Basic
- 正規表現について VB6
VB6で正規表現(Microsoft VBScript Regular Expression 5.5を使っているのですが、 (1) No001の場合、001を取得 (2) Noの場合は空文字を取得 したいのですが、どうすればよいのでしょうか? re.Pattern = "^No(.+)$" この場合、(1)の場合、マッチしますが(2)でマッチしません。 正規表現に詳しい方、VB6で正規表現をよく使う方、教えて下さい。
- ベストアンサー
- Visual Basic
- VB.NETの正規表現をVBAで記述するには
VB2010.NETのコードをExcel2010のVBAのコードに置き換える作業をしていますが、List1のようにVB.NETのコードには、Inports System.Text.RegularExpressions で.NET正規表現パッケージが使われて、この部分をVBAではどのように記述すればよいのでしょうか。 自分なりにList2のようにしてみましたが、Dim M As MatchのMatchの部分で「ユーザ定義型は定義されていません」というコンパイルエラーが発生します。 参照設定にはSystem.Text.RegularExpressionsが見当たりませんが何を指定すればよいのでしょうか。 Microsoft VBScript Regular Expressions 5.5のRegExpオブジェクトでは後読みができないので大変困っています。 よろしくお願いします。(Windows7) ---List1:VB.NET(正常)--------------- Option Explicit On Option Strict On Imports System.Text.RegularExpressions Module Module1 Sub Main() Dim SampleText As String = "今日は西暦2014年6月20日です" Dim M As Match = Regex.Match(SampleText, "(?<=西暦)\d+") If Not M.Success Then Console.WriteLine("no match") Else Dim MatchedText As String = M.Value Dim MatchedFrom As Integer = M.Index Dim MatchedLen As Integer = M.Length MsgBox("matched [" & MatchedText & "]" & _ " from char#" & MatchedFrom.ToString() & _ " for " & MatchedLen.ToString() & " chars.") End If End Sub End Module ---List2:VBA(このコードではエラーになる)----- Option Explicit Sub test() Dim SampleText As String Dim M As Match Dim R As New Regex Dim MatchedText As String Dim MatchedFrom As Integer Dim MatchedLen As Integer SampleText = "今日は西暦2014年6月20日です" R = Regex("(?<=西暦)\d+") M = R.Match(SampleText) If Not M.Success Then MsgBox ("no match") Else MatchedText = M.Value MatchedFrom = M.Index MatchedLen = M.Length MsgBox("matched [" & MatchedText & "]" & _ " from char#" & MatchedFrom.ToString() & _ " for " & MatchedLen.ToString() & " chars.") End If End Sub ------------------------------------------
- ベストアンサー
- Excel(エクセル)
- VB.NETの正規表現の検索を教えてください。
VB.NETの正規表現で文章中(HTMLソース)から番号を抜き取りたいのですが、 先頭の1つだけしか見つけられません。 htmlソース内に 番号:10000 番号:20000 番号:30000 番号:40000 という文字があるので、その後半の10000や20000を取得したいです。 下記のコードで実行すると、10000が4つ出力されてしまいます。 良い方法をご教示頂きたいです。よろしくお願いいたします。 Dim pagedata As String <---htmlソース Dim reg As Regex reg = New Regex("番号:(?<datano>.+)", RegexOptions.Compiled) Dim DataNo As String m = reg.Match(pagedata) While m.Success = True DataNo = reg.Match(pagedata).Result("${datano}") m = m.NextMatch() Console.WriteLine(DataNo) End While
- ベストアンサー
- Visual Basic
- 正規表現で分かりません
例えば以下のようなパターンの正規表現チェックがあるのですが、 どのようなものを意味しているか分かりません。 教えていただけますでしょうか。 よろしくお願いします。 以下の情報は調べたのですが。 +(プラス)・・・直前の1文字の1回以上の繰り返しを表現 . (ピリオド)・・・改行コード以外の1文字にマッチするか否か [ ](大括弧)・・・囲みの中に書かれた任意の1文字にマッチするか否か ^([^ ]+) +[^ ]+.+S3.lzh
- ベストアンサー
- Microsoft ASP
- 正規表現
例えば下のような文字列があって、{~} を正規表現で最初の一つをマッチさせたいのですが、{~} が複数あると最初の一つだけを取り出すことができません。 あああああ{aaaaa}いいいいい{bbbbb}ううううう パターンは /{.*}/ こんな感じでやっているのですが結果は、 {aaaaa}いいいいい{bbbbb} となってしまいます。 正規表現に詳しい方教えてください。
- ベストアンサー
- その他(プログラミング・開発)
お礼
正規表現の回答ありがとうございます! 残念ながら、教えていただいた方法では解決しませんでした。 しかし、正規表現の自分より正しい表記なんだと思いますので、 大変勉強になります。