0

ファイル名の Ist 部分と最後の部分を削除しようとしています。ディレクトリの最初の部分 ( ) とファイル名拡張子の最後の部分( )/external/prop/new/test/File.Name.will.BE.this.extension.date を削除したいような ファイル名があるので、出力ファイル名は次のようになります。/external.date/prop/new/test/File.Name.will.BE.this.extension

例えば:

  • 古いファイル名: /external/prop/new/test/FACL.Prop.for.BBG.txt.09242012
  • 新しいファイル名:/prop/new/test/FACL.Prop.for.BBG.txt

  • 古いファイル名:/external/prop/old/test/set2/FACL.Prop.FITCH.csv.09242012

  • 新しいファイル名: /prop/old/test/set2/FACL.Prop.FITCH.csv

私は次のようなことを試しました

my($FinalName, $Finalextension) = split /\.(?!.*\.)/, substr($Fname,$Flength);

しかし、それはあまり役に立ちません。

/external常に同じままですが、日付は常に異なります.拡張子が数字になる可能性があるため、数字を削除することはできません。

4

3 に答える 3

2
$Fname =~ s|^/external||;  # Remove leading "external" from path
$Fname =~ s|\.\d{8}$||;    # Remove date from end of filename
于 2012-09-24T16:12:10.110 に答える
1

で必要なテキストをキャプチャする次の正規表現を試してください$1

^\/[^/]+(.*?)\.\d{8}$

これは、日付が常に 8 つの数字であることを前提としています。最後\d{8}を適切な日付正規表現に置き換えることができます。

これはRegExr hereでテストできます。

正規表現の分解:

  • ^\/スラッシュが続く行の先頭に一致します (エスケープされます)
  • [^/]+次のスラッシュ ( の終わりを示すため/external)が見つかるまで、すべてのテキストに一致します。
  • (.*?)パターンの最後が見つかるまで、必要なすべてのテキストに一致し、貪欲にキャプチャします
  • \.\d{8}$最後のピリオドの後に 8 桁の日付が続き、その後に行末が続くものと一致します
于 2012-09-24T16:15:20.273 に答える
1
my $qfn = '/external/prop/new/test/FACL.Prop.for.BBG.txt.09242012';
$qfn =~ s{\.[^.]*\z}{};  # Remove last "extension".
$qfn =~ s{^/[^/]+}{};    # Remove first part of path.
于 2012-09-24T16:03:55.240 に答える