RegEx拆分为部分然后匹配字符串

时间:2017-03-02 13:19:10

标签: regex powershell

我有一个非常大的文本文件,其中包含括号内的单引号字符串。

[
'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

使用'(.*?)'我可以提取单引号之间的所有字符串,但我不确定使用哪一个是有意义的:

  1. 使用PowerShell .split(']')方法将文本拆分为数组,然后使用'(.*?)'提取字符串。

  2. 最喜欢的方式(如果可能的话),使用正则表达式提取这些字符串并使用[]作为分隔符拆分成部分。

1 个答案:

答案 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'}

然后使用方括号作为分隔符将其拆分。