在字符串计数中添加字符从结尾

时间:2016-05-23 14:54:28

标签: string powershell insert

我有一个文本文件,我需要检查特殊位置是否存在特殊字符。

首先我发现,如果角色存在与否。如果不是,我想将它添加到缺失的位置。问题是,我正在检查的角色前面的字符数正在改变。这意味着我不能简单地使用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 个答案:

答案 0 :(得分:2)

您可以使用负面的lookbehind和积极的前瞻进行正则表达式替换:

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

(?<!...)是一个负面的背后,基本上意味着&#34;这在比赛之前不存在&#34;,&#34;这个&#34;在这里是一个字面反斜杠 (?=...)是一个积极的前瞻,意思是&#34;这在比赛后确实存在&#34;,&#34;这个&#34;在这里是字符串末尾(.{6})的6个字符($)的序列。

前瞻和后瞻性表达都不会成为比赛的一部分,所以上面的操作只是用反斜杠替换负前瞻和正向前瞻之间的空字符串(从而有效地将该字符插入到字符串中),但只有当字符串末尾的6个字符前面没有反斜杠时才会出现。

答案 1 :(得分:1)

这可以通过regex替换(单行)来完成:

假设您的特殊字符为%,并且您始终希望将其置于倒数第三的位置:

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

结果:

1234567%89

如果您已经有%,则不会更改:

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

结果:

1234567%89

Regex Demo.