私は日々の処理からpdfファイルのリストを持っていますが、いくつかはさまざまな書式設定の日付スタンプを含んでいます。Powershell:正規表現が一致しない場合は項目を残してください
例:
$f = @("testLtr06-09-02.pdf", "otherletter.pdf","WelcomeLtr043009.pdf")
私は、文字列「DATESTAMP」と数字の任意の連続したグループ(4人以上が、私は6に変更すること)を交換、ダッシュをストリッピングすることにより日付スタンプを削除しようとしています。
は、これまでのところ私はこれを持っている:
$d = $f | foreach {$_ -replace "-", ""} | foreach { $_ -replace ([regex]::Matches($_ , "\d{4,}")), "DATESTAMP"}
echo $d
出力:
testLtrDATESTAMP.pdf
DATESTAMPoDATESTAMPtDATESTAMPhDATESTAMPeDATESTAMPrDATESTAMPlDATESTAMPeDATESTAMPtDATESTAMPtDATESTAMPeDATESTAMPrDATESTAMP.DATESTAMPpDATESTAMPdDATESTAMPfDATESTAMP
WelcomeLtrDATESTAMP.pdf
ファイルは日付スタンプを持っていますが、それは-replaceを怖がらと後DATESTAMPを挿入しているように見える場合、それは正常に動作しますすべての文字。これを修正する方法はありますか?私はそれをforeachループに変更しようとしましたが、正規表現から真偽を取得する方法を理解できませんでした。
ありがとうございます。 $で
感謝を!私はそれが私がループバージョンで探していたものだと思う。 foreach($ fの$ item)に切り替えることなく、IsMatchを単一の文で使用するために、caseまたはif節に似た何かをする方法がありますか? – wtjones
[正規表現]の代わりに-match演算子を使うこともできます::一致します。少し短くて読みやすいはずです。 – Joey
私の答えは、私がうまくいくと思うものに更新されました。しかし、私はpowershellユーザーではなく、パイプラインのif-elseステートメントは許可されない可能性があることに注意してください。 – jitter