Saya sungguh memerlukan beberapa bantuan. Saya mendapat sebagian besar kode saya untuk bekerja tetapi saya mengalami masalah menemukan cara untuk hanya menambahkan - di setiap lokasi karakter 79 - tetapi hanya jika ada nomor atau huruf. Kode di bawah ini menambahkan dash di lokasi yang benar tetapi saya tidak dapat menemukan cara untuk tidak menambahkan tanda hubung jika karakter di lokasi 79 adalah ruang.

(GC C: \ test \ tst1.txt) -Replace ". {79}", "$ & -" | SC C: \ test \ out.txt

0
oomotofxoo 16 सितंबर 2020, 19:10

1 उत्तर

सबसे बढ़िया उत्तर

Anda dapat melakukan yang berikut untuk menyisipkan - pada karakter 79 yang memenuhi kondisi yang diperlukan:

(Get-Content C:\test\tst1.txt) -replace '^.{79}(?<=[a-z0-9])','$&-' |
   Set-Content C:\test\out.txt

(?<=) Apakah tampilan positif untuk karakter dari set karakter a-z (case-insensitive) atau 0-9}


Jika Anda ingin memasukkan - setelah setiap 79 karakter yang memenuhi persyaratan, Anda dapat melakukan hal berikut:

$regex = '(.{78}[^a-z0-9])|(.{78}[a-z0-9])'
$sb = { param($m)
        if ($m.Groups[2].Success) {
            "{0}-" -f $m.Groups[2]
        } else {
            $m.Groups[1]
        }
}
Get-Content c:\test\tst1.txt | Foreach-Object {
    [regex]::Replace($_,$regex,$sb)
} | Set-Content C:\test\out.txt

Skenario ini kemungkinan akan memiliki solusi yang lebih verbose karena PowerShell REEX tidak mendukung kecocokan reset.


Perhatikan bahwa komentar Anda dan deskripsi posting Anda tidak memiliki persyaratan yang sama. Kode di atas menambahkan - pada posisi karakter 79 dan menggeser posisi sebelumnya 79-endofstring ke kanan. Itu tidak menggantikan. Melakukan ganti yang sebenarnya, akan terlihat seperti berikut:

(Get-Content C:\test\tst1.txt) -replace '(^.{79})(?<=[a-z0-9]).','$1-' |
   Set-Content C:\test\out.txt
1
AdminOfThings 16 सितंबर 2020, 20:23