对于我正在处理的项目,我需要使用表单中的内容重命名成千上万的表单(.pdf)。
到目前为止,我已对它们运行OCR并将内容导出到文本文件中。每个PDF表单都有一个同名的.txt文件,其中包含所有信息。我想使用powershell(如果可能的话)提取文本文件的特定部分来重命名PDF文件,但我不知道如何做到这一点。
为了更好地了解我正在处理的内容,pdf和文本文件(ex-12345.pdf和12345.txt)中包含的表单看起来像这样 -
~~~
选区:xxxyyyzzz
投票站:abc def ghi(001)
stream:123
~~~
我需要做的是提取投票站名称并将pdf文件重命名为。
“12345.pdf” - > “abc_def_ghi_(001).PDF”
所以我需要弄清楚如何从12345.txt中提取“station:”和“stream:”之间的字符串。但是为了使事情变得复杂一点,我想要提取字符串的文本文件在间距方面有一些不规则性。
例如,上一个表单在文本文件中可能如下所示 -
~~~
constit uency:xxxyyyzzz
polling stat i on:abc de f ghi(00 1)
s tream:12 3
~~~
幸运的是,这些信件本身似乎完好无损。
所以,我想学习如何从这些文本文件中提取包含轮询站名称的字符串,并用它重命名相应的pdf文件。
感谢您的帮助。
答案 0 :(得分:1)
'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'
答案 1 :(得分:1)
假设您知道每个“轮询站”行的行间距相同,您可以删除所有空格。然后修剪掉不相关的部分,然后使用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'