2016-05-23 44 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.