2016-05-23 21 views
1

私は特殊文字が特別な位置にあるかどうかを確認する必要があるテキストファイルを持っています。末尾から数えて文字列に文字を追加する

まず、キャラクターが存在するかどうかを調べます。そうでない場合は、欠けている位置に追加したいと思います。問題は、私が確認しているキャラクターの前にいる文字の数が変化していることです。つまり、私は単に文字を同じ位置に常に追加することはできません。insertを使用してください。

文字列の最後は常に同じように見えますが、行方不明の位置に文字を直接追加するか、文字列の末尾から数えて文字を数えた後にその文字を挿入する方法はありますか?現時点で

は私のコードは次のようになります。

$content = Get-Content Path\to\file.txt 
foreach ($line in $content) { 
    if ($line[-6] -ne '\') { 
     #Add character here 
    } 
    echo $line 
} 

EDIT:

これは私が何をしたいんが、私はそれが遠く離れて良い解決策からだと思う:

$content = Get-Content path\to\file.txt 
foreach ($line in $content) { 
    if ($line[-25] -ne '\') { 
     $new_line = $line.Split(';')[0] 
     $new_line1 = $line.Split(';')[1] + '\' | % {$_ -replace '"', ''} 
     $new_line2 = $line.Split(';')[2] 
     $test = Write-Host $new_line';"'$new_line1'";'$new_line2 
    } 
} 
echo $test 

答えて

2

あなたは否定後読みと肯定先読みで、正規表現の置換を行うことができます:

$line -replace '(?<!\\)(?=.{6}$)', '\' 

(?<!...)基本的に「これは試合の前に存在していない」という意味、否定後読みです、 "this"はここでリテラルのバックスラッシュです。
(?=...)は「これは一致後に存在する」を意味する肯定的な先読みであり、「this」は文字列の最後にある6文字(.{6})のシーケンスであることをここに示します($)。

lookaheadとlookbehindの両方の式がマッチの一部にならないため、上記の操作では、負のlookbehindと正のlookaheadの間の空の文字列をバックスラッシュで置き換えるだけです(したがって、文字を文字列に効果的に挿入)。文字列の最後の6文字にバックスラッシュが前に付いていない場合に限ります。

+0

これはまさに私が探していたものです! Thx これで、その文字を直接ファイルに置き換える方法を知る必要があります。 – BallerNacken

+0

'(Get-Content filename)-replace ... |セットコンテンツファイル名 ' –

1

これはregexで置き換えることができます(1ライナー):

あなたの特別な文字が%であり、あなたは常に第三の最後の位置にそれを置きたいと仮定します

"12345689" -replace '^(.*?)%?(.{2})$', '$1%$2' 

結果:

1234567%89 

すでに場所で%を持っている場合、それは勝ちましたトンの変更:

"123456%89" -replace '^(.*?)%?(.{2})$', '$1%$2' 

結果:

1234567%89 

Regex Demo.

関連する問題