2016-05-23 42 views
1

我有一個文本文件,我需要檢查特殊字符是否存在於一個特殊的位置。添加字符從字符串計數結束

首先我發現,如果字符存在與否。如果不是,我想將它添加到缺失的位置。問題是,我正在檢查的角色前面的角色數量正在改變。這意味着我不能簡單地使用insert在同一位置添加角色。

雖然字符串的末尾看起來總是相同的。有沒有辦法,我可以直接在缺少的位置添加字符,或者在從字符串的末尾向後計數多個字符後將其插入到某個位置?

目前我的代碼看起來是這樣的:

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

編輯:

此我想要做什麼,但我認爲這是遠離一個很好的解決方案:

$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表達式都不會成爲匹配的一部分,所以上面的操作只是用反斜槓替換了反向lookbehead和positive lookahead之間的空字符串(從而有效地將該字符插入到字符串中),但只有在字符串末尾的6個字符之前沒有反斜槓。

+0

這正是我所期待的! Thx 現在我只需要找出如何將該字符直接替換爲文件。 – BallerNacken

+0

'(Get-Content filename)-replace ... |設置內容文件名「 –

1

這可以用regex替換(單行):

假設你的特殊字符是一個%,你總是希望把它在倒數第三位:

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

結果:

1234567%89 

如果你已經到位%,它贏得了」噸變化:

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

結果:

1234567%89 

Regex Demo.