regex - 使用内容分隔符作为文件名在 PowerShell 中拆分文本
问题描述
我正在尝试将 txt 转录内容拆分为单个文件,每个文件一个文件。
该文件被标记为[c. 1r]
, [c. 1v]
...[c. 7v]
等等。
使用此示例,我能够创建一个 PowerShell 脚本,该脚本使用与每个页面分隔符匹配的正则表达式来发挥魔力,但我似乎完全无法使用正则表达式来为页面提供正确的名称。使用此代码
$InputFile = "input.txt"
$Reader = New-Object System.IO.StreamReader($InputFile)
$a = 1
while (($Line = $Reader.ReadLine()) -ne $null) {
if ($Line -match "\[c\. .*?\]") {
$OutputFile = "MySplittedFileNumber$a$Matches.txt"
$a++
}
Add-Content $OutputFile $Line
}
所有文件都以MySplittedFileNumber1System.Collections.Hashtable.txt
匹配而不是匹配命名,"$Matches[0]"
我被告知该变量不存在或已被过滤-Exclude
。
我在执行前设置的所有尝试$regex
似乎都无济于事,有人可以指出我如何将结果文件名格式化为MySplittedFileNumber[c. 1r].txt
.
只使用部分匹配\[(c\. .*?)\]
会更好,但是一旦我知道如何检索匹配,我敢打赌我可以找到解决方案。不知何故,我可以在 中进行变量1r
1v
设置$a
,但我宁愿使用 txt 文件中的变量设置,因为手稿中的某些对开页可能编号错误,我需要保留它。
原文内容input.txt
:
> [c。1r] 文本段落 文本段落 ... 文本段落 [C。1v] 文本段落 文本段落 ... 文本段落 [C。2r] 文本段落 文本段落 ... 文本段落
期望的结果:
内容MySplittedFileNumber[c. 1r].txt
:
> [c。1r] 文本段落 文本段落 ... 文本段落
内容MySplittedFileNumber[c. 1v].txt
:
> [c。1v] 文本段落 文本段落 ... 文本段落
内容MySplittedFileNumber[c. 2r].txt
:
> [c。2r] 文本段落 文本段落 ... 文本段落
解决方案
我试图重现它,并稍作改动它就起作用了:
$InputFile = "input.txt"
$Reader = New-Object System.IO.StreamReader($InputFile)
$a = 1
While (($Line = $Reader.ReadLine()) -ne $null) {
If ($Line -match "\[c\. .*?\]") {
$OutputFile = "MySplittedFileNumber$a$($Matches[0]).txt"
$a++
}
Out-File -LiteralPath "<yourFolder>\$OutputFile" -InputObject $Line -Append
}
- 要在其中调用数组的位置,
""
您必须像这样格式化变量$($array[number])
- 要写入文件,您应该提供完整路径而不仅仅是文件名。
推荐阅读
- python - Python:递归调用的抽象方法
- r - 用 plotly 为多列制作折线图
- ios - 保留 iOS Progressive Web App 上的导航按钮,但隐藏地址栏
- angular - 在 RxJs 6 中避免嵌套的 subcribe() 调用
- ruby-on-rails - 在Ruby中对json分层数据进行排序
- typescript - 如何在打字稿中为泛型参数添加“可更新”约束?
- html - XPath 表达式,用于查找具有属性但不包含这些后代的任何后代的后代
- css - Styled-components 是指兄弟组件的 props
- javascript - 单击包含复选框的容器 - JQuery
- docker - Kubernetes NodePort 不返回来自容器的响应