regex - 如果文本被换行符或标签打断,如何替换文本?
问题描述
我从带有 powershell 的程序中读取了一个文件,并想在那里替换某些字符串。例如,文件的内容如下所示:
<"#319",
@"Sprache" = "DE">
<F5@T@Z7@L1031>5<F5@T@Z7@L1033>)<F5@Z7@L1031><Tab>#319-10002
现在我想用 替换例如#319-10002
,Some 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种:
- #Number-数字
- #数字文本
现在还有行长超过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
我目前很茫然如何解决这个问题。你知道如何解决这个问题吗?
解决方案
在应用替换之前,您可以预处理文件
以删除 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
推荐阅读
- python - 如何定义 clear_shortcuts 中的每个快捷方式?所以每个快捷方式都可以用作别名?不和谐.py
- html - html 页面未显示(仅在调试中)
- google-data-studio - Google Data Studio 条形图 - 相同的名称在 Data Studio 上显示为单独
- r - 从 R 创建一个由 0 和 1 组成的矩阵
- sql - MS Access 和 ODBC 的 AUTOINCREMENT 列的语法
- java - 为什么聊天列表没有出现?
- mesh - 如何自动重命名gmsh的python API中的卷
- python - YOLOv5 对象检测和时间戳
- python - cx_Freeze exe 通过双击打开,但不是从 python os.startfile()
- php - 如何在打印页面@media print 中对齐引导列?