0

特定のプレフィックスを含むことができるいくつかのファイル/フォルダーを操作する必要があります。たとえば、ファイル名は次のようになります。

1.2.0 MyDocfile.doc
1.1.2.3 Anotherfile.txt

プレフィックスとその後のスペース(1.2.0、1.1.2.3)を削除して、実際のファイル名だけを取得できるようにしたい。
これを行うための最良の方法は何ですか?正規表現?

誰かが例を挙げてもらえますか?

4

4 に答える 4

5
var formattedName = name.Substring(name.IndexOf(" ") + 1);

オプションのプレフィックスの場合、正規表現が必要です。

var formattedName = Regex.Replace(name, @"^[\d.]* ",  "");

すべてのファイル名をフォーマットするには:

Regex regex = new Regex(@"^[\d.]* ");
IEnumerable<string> formattedNames = names.Select(f => regex.Replace(f, ""));
于 2012-11-14T14:17:21.840 に答える
3

"^[\\d.]* ?(.*)$"キャプチャで実際のファイル名を指定する必要があります。

私はC#を知らないので、これは一般的な答えです。

于 2012-11-14T14:16:37.407 に答える
2

次を使用できます。

fileName = fileName.Substring(fileName.IndexOf(' ') + 1);

名前にスペースが含まれていない場合は、名前が返されます。これにより、正規表現が不要になります。

于 2012-11-14T14:17:13.537 に答える
0

正規表現が最善の解決策になります。説明したようにプレフィックスが一貫した形式である場合、次のようにプレフィックスをカットする必要があります。

filenames.RemoveAll(filename => Regex.IsMatch(filename, @"^([\d\.]+ )"));

これはより完全な例です:

var filenames = new List<string> { "1.2.0 MyDocfile.doc", "1.1.2.3 Anotherfile.txt", "Otherfile.doc", " strange_file_name.docx" };
filenames.RemoveAll(filename => Regex.IsMatch(filename, @"^([\d\.]+ )"));    
filenames.ForEach(Console.WriteLine);

これにより、「Otherfile.doc」と「strange_file_name.docx」が出力されます。最後のファイル(スペースで始まる)も削除する場合は、次のパターンを使用します^([\d\.]* )

更新:文字列の先頭と一致する必要があることを示すために、カレット「^」を追加しました。

于 2012-11-14T14:30:03.653 に答える