2011-07-25 25 views
2

文字列からファイルタイプを抽出できる正規表現を書いてみたいと思います。Cで正規表現を使用してファイル拡張子を抽出する

文字列は次のようである:

テキストファイル (.PRN;の.txt; の.rtf;の.csv; .WQ1)| .prn; .txt; .rtf; .csv; .wq1 | PDF ファイル(.pdf)| .PDF | Excelファイル (.XLS;の.xlsx、.xlsm ; .xlsb; .xlam; .xltx、.xltm ; .xlw)例えば

結果

.PRN

+2

なぜ組み込みクラスを使用しないのですか? –

+1

あなたの質問は何ですか? –

+5

@Matt Ellen、おそらく要件を満たしていないからです... OPはファイル名から拡張子を抽出しようとしていません –

答えて

1

ダイアログfilterformatを持っています。それがより安全になります

など

の拡張機能は、すでに2回表示(初登場の信頼性が低い)とあなたが正規表現でこれを処理しようとすると、直接あなたを約

Text.Files (.prn;.txt;.rtf;.csv;.wq1)|.prn;.txt;.rtf;.csv;.wq1| 

考える必要があります既知の構造に従います。

string filter = "Text Files (.prn;.txt;.rtf;.csv;.wq1)|.prn;.txt;.rtf;.csv;.wq1|PDF Files (.pdf)|.pdf|Excel Files (.xls;.xlsx;.xlsm;.xlsb;.xlam;.xltx;.xltm;.xlw)"; 

string[] filterParts = filter.Split("|"); 

// go through the odd sections 
for (int i = 1; i < filterParts.Length; i += 2) 
{ 
    // approx, you may want some validation here first 
    string filterPart = filterParts[i]; 

    string[] fileTypes = filterPart.Split(";"); 
    // add to collection 
} 

これは、フィルタ文字列の構文が正しいことを前提としています。

+0

ありがとう、私は正規表現の代わりに分割を使用しました。 – Reza

0
Regex extensionRegex = new Regex(@"\.\w+"); 
foreach(Match m in extensionRegex.Matches(text)) 
{ 
    Console.WriteLine(m.Value); 
} 
+1

+1:良いスタートですが、 '。$$$'のような正当なファイル拡張子の場合は動作しません。 – Jon

+0

@Jon、true。 "\ w"をすべての有効な文字を含むグループに置き換える必要があります –

+0

'string.Format(" [^ {0}] + "、Regex.Escape(System.IO.Path.InvalidPathChars )) ')。 – Jon

0

あなたが持っている文字列の形式がかなり固定され、その後、次のように動作する必要がある場合:

\.[^.;)]+