对于我正在工作的项目,我有数以千计的表单(.pdf),我需要使用表单中的内容来重命名。
到目前为止,我已经对它们运行了OCR,并将内容导出为文本文件。每个PDF表单都有一个同名的.txt文件,其中包含所有信息。我想使用powershell (如果可能)提取文本文件的特定部分来重命名PDF文件,但我不确定如何才能做到这一点。
为了更好地了解我正在处理的内容,pdf和文本文件(ex-12345.pdf和12345.txt)中包含的表单如下所示-
选区: xxxyyyzzz
投票站: abc def ghi (001)
流: 123
我需要做的是提取投票站名称并将pdf文件重命名为该名称。
"12345.pdf“-> "abc_def_ghi_(001).pdf”
所以我需要弄清楚如何从12345.txt中提取"station:“和"stream:”之间的字符串。但让事情变得更复杂的是,我想要从中提取字符串的文本文件在间距方面有一些不规则之处。
例如,在文本文件中,前面的表单可能如下所示-
构造: xxxyyyzzz
polling stat i on: abc de f ghi (00 1)
S流: 12 3
幸运的是,这些字母本身似乎是完好无损的。
因此,我想学习如何从这些文本文件中提取包含投票站名称的字符串,并使用它重命名相应的pdf文件。
谢谢你的帮助。
发布于 2017-07-26 02:53:47
'polling station: abc def ghi (001)' |
Select-String ' station: (.+)' |
ForEach-Object { "{0}.pdf" -f ($_.Matches[0].Groups[1].Value -replace ' ','_') }
# outputs 'abc_def_ghi_(001).pdf' 发布于 2017-07-26 03:39:06
假设您知道每个“投票站”行上的行距是相同的,那么您可以删除所有的空格。然后裁剪掉不相关的部分,然后用substring()方法格式化您的行。
$Text = 'constit uency: xxxyyyzzz
polling stat i on: abc de f ghi (00 1)
stream: 12 3'
$trimmed = $text -replace "\s",'' -replace '^.*pollingstation:','' -replace "stream:.*$",''
"$($trimmed.substring(0,3))_$($trimmed.substring(3,3))_$($trimmed.substring(6,3))_$($trimmed.substring(9,5)).pdf"
#Output: 'abc_def_ghi_(001).pdf'https://stackoverflow.com/questions/45310551
复制相似问题