我有一个非常大的文本文件,其中包含括号内的单引号字符串。
[
'stringIneedToExtractBetweenSingleQuotes' some other
text
and
characters asdasf/*- 'AnotherStringIneedToExtract'
]
[
'anotherstring' some other
text and characters asdasfds/*- 'PleaseExtractMe'
]
[...]
我想在括号分隔的分隔部分中引用引号之间的字符串,如数组索引,
$array[0]
或$matches[0]
stringIneedToExtractBetweenSingleQuotes
AnotherStringIneedToExtract
$array[1]
或$matches[1]
anotherstring
PleaseExtractMe
使用'(.*?)'
我可以提取单引号之间的所有字符串,但我不确定使用哪一个是有意义的:
使用PowerShell .split(']')
方法将文本拆分为数组,然后使用'(.*?)'
提取字符串。
最喜欢的方式(如果可能的话),使用正则表达式提取这些字符串并使用[]作为分隔符拆分成部分。
答案 0 :(得分:0)
由于它是一个大文件,我会使用Get-Content
和-Readcount
来减少I / O操作。然后,您可以使用链式-match
和-replace
作为数组运算符来过滤然后提取所需的数据:
$ExtractedLines=
Get-Content .\testdata.txt -ReadCount 1000 |
ForEach-Object {$_ -match ".*'.+'.*" -replace ".*'(.+)'.*",'$1'}
编辑:
如果你想保留方括号:
$ExtractedLines=
Get-Content .\testdata.txt -ReadCount 1000 |
ForEach-Object {$_ -match ".*'.+'.*|[\[\]]" -replace ".*'(.+)'.*",'$1'}
然后使用方括号作为分隔符将其拆分。