首页 > 解决方案 > 如果文本被换行符或标签打断,如何替换文本?

问题描述

我从带有 powershell 的程序中读取了一个文件,并想在那里替换某些字符串。例如,文件的内容如下所示:

<"#319",
    @"Sprache" =        "DE">

<F5@T@Z7@L1031>5<F5@T@Z7@L1033>)<F5@Z7@L1031><Tab>#319-10002

现在我想用 替换例如#319-10002Some Text这没问题。

$output = New-Object System.IO.StreamWriter (Join-Path -Path $outputPath -ChildPath "$outputName.ildoc")

Get-Content -Path (Join-Path -Path $inputPath -ChildPath "$inputName.ildoc") -ReadCount 512 | ForEach-Object {
    $value = $_

    foreach($entry in $csvInput.GetEnumerator()) {
        $value = $value -replace $entry.Name, $entry.Value
    }

    $output.Write((($value | Out-String) -replace "`r`n", "`n"))
}

$output.Close()

这些“变量”来自 CSV 文件,因此是动态的。有2种:

  1. #Number-数字
  2. #数字文本

现在还有行长超过80个字符的情况。然后生成文件的程序会在 80 个字符后自动插入换行符。

<"#319",
    @"Sprache" =        "DE">

<F5@T@Z1@L1031>3<F5@T@Z1@L1033>)<F5@Z1@L127><Tab><F5@Z1@L1031>Some more Text #3
19-10002

然后还有字符串被标签打断的情况。如果文本在表格中并且文本比列长,则程序会自动<SR>在换行符处插入 a,后跟换行符。

<Cell, Straddle = 2,
    Top Ruling Color =  16,
    Left Ruling Weight =    0.75,
    Left Ruling Color = 30,
    Left Ruling Visible =   no><!Page,
    Left Margin =       0.0039372 Inches,
    Right Margin =      0.0039372 Inches>
<"text:zentr">

#319-10<SR>
002

我目前很茫然如何解决这个问题。你知道如何解决这个问题吗?

标签: regexpowershell

解决方案


在应用替换之前,您可以预处理文件
以删除 Pos~80 并<SR>使用正则表达式中断:

(Get-Content .\input.ildoc -raw) -replace '(?m)(?<=^.{79,})\r?\n' -replace '\<SR\>\r?\n'

yedls 这里(上面两个样本)

<"#319",
    @"Sprache" =        "DE">

<F5@T@Z1@L1031>3<F5@T@Z1@L1033>)<F5@Z1@L127><Tab><F5@Z1@L1031>Some more Text #319-10002
<Cell, Straddle = 2,
    Top Ruling Color =  16,
    Left Ruling Weight =    0.75,
    Left Ruling Color = 30,
    Left Ruling Visible =   no><!Page,
    Left Margin =       0.0039372 Inches,
    Right Margin =      0.0039372 Inches>
<"text:zentr">

#319-10002

推荐阅读