【发布时间】:2019-01-25 05:33:02
【问题描述】:
正则表达式不工作,要提取两个部分之间的内容(函数工作正常,但可能我没有提到正确的正则表达式来查找)
ExtractFromWordDoc"D:\Scan.doc" '(?:\d{2}\.\d).*(?:Non-Payment)' '(?:\d{2}\.\d).*(?:Financial covenants and other obligation)'
Word文档内容(需要提取29.1和29.2之间的信息)
29.1 不付款
债务人不会在到期日支付任何根据财务文件在其表示应付的地点和货币支付的应付金额,除非:
(a) 其未能付款的原因是: (i) 行政或技术错误;要么 (b) [在以下期限内付款: (i)(在上述 (a)(i) 段的情况下),到期日的 [ ] 个工作日;
29.2 财务契约和其他义务
(a) 第 27 条(财务契约)的任何要求未得到满足[或债务人不遵守第 26 条(信息承诺)][和/或第 28 条(一般承诺)的规定]。
function ExtractFromWordDoc{
Param([string]$SourceFile, [string]$SearchKeyword1, [string]$SearchKeyword2)
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$doc = $word.Documents.Open($SourceFile,$false,$true)
$sel = $word.Selection
$paras = $doc.Paragraphs
foreach ($para in $paras)
{
if ($para.Range.Text -match $SearchKeyword1)
{
$startPosition = $para.Range.Start
}
if ($para.Range.Text -match $SearchKeyword2)
{
$endPosition = $para.Range.Start
break
}
}
[array]$content=New-Object System.Collections.ArrayList
$doc.Range($startPosition, $endPosition).Copy()
$content=Get-Clipboard -Raw
$content = $content -replace "'", ""
# cleanup com objects
$doc.Close()
$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($doc) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
【问题讨论】:
标签: regex powershell