C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: 拡張子を判別したいのですが、正規表現をうまく書けません。


(過去ログ 62 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■35839 / inTopicNo.1)  拡張子を判別したいのですが、正規表現をうまく書けません。
  
□投稿者/ テキスト編集 (5回)-(2009/05/14(Thu) 21:02:48)

分類:[C#] 

こんにちは。
拡張子を判別したいのですが、正規表現をうまく書けません。
どなたかjpgかpngのとき、と書く方法を教えてください。

if (Regex.Match(args[1].ToLower(),"[(jpg)|(png)]").Success) {}

と書いてみたのですが、うまくいかないみたいです。
ご助言お願いします。

引用返信 編集キー/
■35844 / inTopicNo.2)  Re[1]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ επιστημη (1922回)-(2009/05/14(Thu) 21:36:47)
επιστημη さんの Web サイト
2009/05/14(Thu) 22:35:56 編集(投稿者)
2009/05/14(Thu) 22:03:51 編集(投稿者)

> うまくいかないみたいです。

なにが/どのように「うまくいかない」?

- コンパイルエラー?
- 実行時エラー?
- Matchするはずなのにしてくれない?
- Matchしないはずなのにしちゃう?
- ほかのなにか?

# 雰囲気からして
# Regex.Match(args[1].ToLower(), "\\.(jpg|png)$").Success
# が"せーかい"かな。

引用返信 編集キー/
■35852 / inTopicNo.3)  Re[2]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ 倉田 有大 (597回)-(2009/05/14(Thu) 22:33:27)
正規表現かー
しばらく使ってないと忘れちゃうの僕だけでしょうか?^^; (質問と関係なくてすいません)
引用返信 編集キー/
■35853 / inTopicNo.4)  Re[1]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ まさる (83回)-(2009/05/14(Thu) 22:37:53)
まさる さんの Web サイト
No35839 (テキスト編集 さん) に返信
> こんにちは。
> 拡張子を判別したいのですが、正規表現をうまく書けません。
> どなたかjpgかpngのとき、と書く方法を教えてください。
>
> if (Regex.Match(args[1].ToLower(),"[(jpg)|(png)]").Success) {}
>
> と書いてみたのですが、うまくいかないみたいです。
> ご助言お願いします。
>

まずは秀丸でもVisual Studioでもいいので正規表現を使った検索を実行してみて、
上手くいくことを確認した上でプログラムに組み込むことをお勧めします。

とりあえず参考URLでも。
http://anond.hatelabo.jp/20080923015641
の真ん中よりちょっと上くらいの「選択」のところを参考にしてください。

引用返信 編集キー/
■35861 / inTopicNo.5)  Re[1]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ biac (97回)-(2009/05/14(Thu) 23:29:14)
biac さんの Web サイト
> 拡張子を判別したいのですが、正規表現をうまく書けません。
> どなたかjpgかpngのとき、と書く方法を教えてください。

うまく書けないうちは、本番では使わなければいいのよ〜 f(^^;

jpg と png だけなら、 こうやって…
string fileNameUC = args[1].ToUpper(CultureInfo.InvariantCulture); //CA1308
if (fileNameUC.EndsWith(".JPG") || fileNameUC.EndsWith(".PNG")) {
 // なんかする
}
…ベタベタに書いたってたいしたことないんだし。
もうちっと種類が多かったら、 拡張子だけ切り出して switch 文で振り分けりゃいいし。


※ うまく書けるようになるための練習なら、 おおいにけっこう。
 でも、 練習だったら、 もっと目標を絞ってシンプルに書くのが吉かと。
 Console.WriteLine("1:" + Regex.IsMatch("hoge.jpg", "jpg").ToString());
 Console.WriteLine("2:" + Regex.IsMatch("hoge.jpg", "(jpg)").ToString());
 Console.WriteLine("3:" + Regex.IsMatch("hoge.jpg", "[(jpg)|(png)]").ToString());
 Console.Write …

> if (Regex.Match(args[1].ToLower(),"[(jpg)|(png)]").Success) {}
> と書いてみたのですが、うまくいかないみたいです。

これでは、 うまくいかない理由として、
・args[1] が想定と違う
・ToLower() の動作が想定と違う
・Match() の動作が想定と違う
・if 文が成立したときの動作 ( {} の中身 ) が想定と違う
…と、 すくなくとも 4つくらいは想定しなきゃいけなくなります。
引用返信 編集キー/
■35862 / inTopicNo.6)  Re[2]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ テキスト編集 (6回)-(2009/05/14(Thu) 23:31:18)
まず結論。

教えていただいた、"\\.(jpg|png)$"でできました。
ありがとうございました。

「うまくいかない」の説明不足ですみません。
正規表現がマッチしていなかったようです。

解決済み
引用返信 編集キー/
■35863 / inTopicNo.7)  Re[2]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ テキスト編集 (7回)-(2009/05/14(Thu) 23:47:59)
みなさん。
ご助言ありがとうございます。

おっしゃるとおり、最初はべたに書いていたのです。
if (args[1].ToLower().Contains("jpg") || args[1].ToLower().Contains("png")) 
ただ、拡張子が増えて長くなってあまりにも見通しが悪くなり、
いっちょう正規表現でも書いてみるかというあたりではまっていました。

いちおう、MessageBox.Show();を大量に使って、
・args[1] は想定通りである。
・ToLower() の動作は想定通りである。
(これを使う前はもっとすごかったです…。
if (args[1].Contains("jpg") || args[1].Contains("Jpg") || ……)
・if 文が成立したときの動作 ( {} の中身 ) の動作は想定通りである。

というところは確認して、最後にのこった正規表現で添削をお願いしたしだいです。

解決済み
引用返信 編集キー/
■35864 / inTopicNo.8)  Re[3]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ επιστημη (1927回)-(2009/05/15(Fri) 00:02:47)
επιστημη さんの Web サイト
2009/05/15(Fri) 00:03:22 編集(投稿者)
> if (args[1].ToLower().Contains("jpg") || args[1].ToLower().Contains("png")) 

Containsだとファイル名の途中に"jpg"があらわれたとき誤認識してアウト。

> ただ、拡張子が増えて長くなってあまりにも見通しが悪くなり、

string[] extends = { ".jpg", ".png", ".bmp", ".gif", ... };
foreach ( string ext in extends ) {
  if ( args[1].ToLower().EndsWith(ext) ) {
    見つけたー♪
  }
}

解決済み
引用返信 編集キー/
■35873 / inTopicNo.9)  Re[4]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ も (75回)-(2009/05/15(Fri) 08:09:30)
HashSet#Containsなら直感的
引用返信 編集キー/
■35875 / inTopicNo.10)  Re[5]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ επιστημη (1929回)-(2009/05/15(Fri) 08:40:36)
επιστημη さんの Web サイト
2009/05/15(Fri) 08:40:53 編集(投稿者)
> HashSet#Containsなら直感的

↓ こゆこと? 直感的かぁ?

    HashSet<string> extends = new HashSet<string>(new string[] { ".jpg", ".png", ".bmp", ".gif" });
    if ( extends.Contains(args[1].Substring(args[1].LastIndexOf('.')).ToLower())) {
       Console.WriteLine("{0} is an image-file.", args[1]);
    }

# ファイル名が '.' を含まないと例外吹っ飛ぶしぃ

解決済み
引用返信 編集キー/
■35880 / inTopicNo.11)  Re[6]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ も (76回)-(2009/05/15(Fri) 09:30:07)
No35875 (επιστημη さん) に返信
> 2009/05/15(Fri) 08:40:53 編集(投稿者)
>
> > HashSet#Containsなら直感的
>
> ↓ こゆこと? 直感的かぁ?
>
> HashSet<string> extends = new HashSet<string>(new string[] { ".jpg", ".png", ".bmp", ".gif" });
> if ( extends.Contains(args[1].Substring(args[1].LastIndexOf('.')).ToLower())) {
> Console.WriteLine("{0} is an image-file.", args[1]);
> }
>
> # ファイル名が '.' を含まないと例外吹っ飛ぶしぃ
たぶんそこはcontains()かんけいな(ry
何かPathから拡張子持ってくる方法があったような気がする.


# 解決墨はずしてた
解決済み
引用返信 編集キー/
■35881 / inTopicNo.12)  Re[7]: 拡張子を判別したいのですが、正規表現をうまく書けません。
□投稿者/ επιστημη (1931回)-(2009/05/15(Fri) 09:44:06)
επιστημη さんの Web サイト
> 何かPathから拡張子持ってくる方法があったような気がする.

↓こゆことかな?

using System;
using System.Collections.Generic;
using System.IO;

class Program {
  public static void Main(string[] args) {
    HashSet<string> extends = new HashSet<string>(new string[] { ".jpg", ".png", ".bmp", ".gif" });
    if ( extends.Contains(Path.GetExtension(args[1].ToLower())) ) {
       Console.WriteLine("{0} はきっと画像ファイル。", args[1]);
    }
  }
}

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -