Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在从末尾开始的字符串计数中添加字符_String_Powershell_Insert - Fatal编程技术网

String 在从末尾开始的字符串计数中添加字符

String 在从末尾开始的字符串计数中添加字符,string,powershell,insert,String,Powershell,Insert,我有一个文本文件,我需要检查一个特殊的字符是否出现在一个特殊的位置 首先我要知道,这个角色是否存在。如果不是,我想把它添加到丢失的位置。问题是,我正在检查的字符前面的字符数正在变化。这意味着我不能简单地使用insert在同一位置添加字符 但是字符串的结尾看起来总是一样的。有没有一种方法,我可以直接在缺少字符的位置添加字符,或者在从字符串末尾向后数字符后将其插入到某个位置 目前,我的代码如下所示: $content = Get-Content Path\to\file.txt foreach ($

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

首先我要知道,这个角色是否存在。如果不是,我想把它添加到丢失的位置。问题是,我正在检查的字符前面的字符数正在变化。这意味着我不能简单地使用
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

这可以通过
regex
replace-too(一行程序)完成:

假设您的特殊字符是
%
,并且您总是希望将其放在最后三位:

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

1234567%89
1234567%89
如果
%
已就位,则不会更改:

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

1234567%89
1234567%89

您可以使用负向后看和正向前看来替换正则表达式:

$line -replace '(?<!\\)(?=.{6}$)', '\'
$line-替换“(?)?
(?是一个否定的lookback,基本上意思是“匹配之前不存在此项”,“此项”在这里是一个反斜杠。
(?=…)
是一个正向前瞻,意思是“匹配后确实存在”,“这”是字符串(
$
)末尾的6个字符(
{6}
)的序列


lookahead和lookahead表达式都不会成为匹配的一部分,因此上面的操作只是用反斜杠替换负lookahead和正lookahead之间的空字符串(从而有效地将该字符插入字符串),但前提是字符串末尾的6个字符前面没有反斜杠。

这正是我要找的!Thx现在我只需要找出如何将该字符直接替换到文件中。
(获取内容文件名)-替换…|设置内容文件名