特定のプレフィックスを含むことができるいくつかのファイル/フォルダーを操作する必要があります。たとえば、ファイル名は次のようになります。
1.2.0 MyDocfile.doc
1.1.2.3 Anotherfile.txt
プレフィックスとその後のスペース(1.2.0、1.1.2.3)を削除して、実際のファイル名だけを取得できるようにしたい。
これを行うための最良の方法は何ですか?正規表現?
誰かが例を挙げてもらえますか?
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, ""));
"^[\\d.]* ?(.*)$"
キャプチャで実際のファイル名を指定する必要があります。
私はC#を知らないので、これは一般的な答えです。
次を使用できます。
fileName = fileName.Substring(fileName.IndexOf(' ') + 1);
名前にスペースが含まれていない場合は、名前が返されます。これにより、正規表現が不要になります。
正規表現が最善の解決策になります。説明したようにプレフィックスが一貫した形式である場合、次のようにプレフィックスをカットする必要があります。
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\.]* )
。
更新:文字列の先頭と一致する必要があることを示すために、カレット「^」を追加しました。