获取特定区域的字符串

时间:2019-06-15 02:27:36

标签: regex powershell

我需要使用powershell代码来获取特定区域的字符串

请参见下图,需要保留绿色矩形的内容,并删除所有其他字符串。

我在第二个区域添加了一些子字符串。它们看起来更复杂。我想知道是否可以一次提取所需的数据。

需要获取数据:

-------- [abc不好]

[c快速缓存/ L1-Cache]

[内存空间/系统内存]

-------- [太好cde]

enter image description here

LoadWeight

2 个答案:

答案 0 :(得分:3)

我们可能可以从收集新行的表达式开始:

.*(\[ ddf \]|\[ edf \])[\s\S]*?description4\s*

Demo 1

.*(\[ ddf \]|\[ edf \])[\s\S]*?\s*(?<=--------\[)

Demo 2

.*(\[ ddf \]|\[ edf \])[\s\S]*?\s*\n(?:-)

Demo 3

如果描述4中有固定的子字符串,我们可以简单地使用它,例如:

.*(\[ ddf \]|\[ edf \])[\s\S]*?---\[ \?\?\?\? \]----.+\s*

Demo 4

.*(\[ .*abc.* \]|\[ .*cde \])[\s\S]*?\]----.+\s*

Demo 5


编辑:

由于我们具有动态模式,并且会根据输入的变化而变化,因此我们将仅对每个规则使用一条规则,即从左上角获取一个非重复的唯一子字符串,并从该字符串中获取一个非重复的唯一子字符串。右下角,我们将设计表达式,然后使用逻辑或将它们连接起来:

(.*(\[ .*系统概述.* \][\s\S]*?LapTop\s*)|(.*\[ AIDA64 Extreme \][\s\S]*?10:14\s*)|(.*\[ DMI \])[\s\S]*?HuronRiver CRB.+\s*)

Demo 6

(.*(\[ .*TOP LEFT.* \][\s\S]*?Bottom RIGHT.*\s*))|(.*(\[ .*TOP LEFT.* \][\s\S]*?Bottom RIGHT.*\s*))

Demo 7

答案 1 :(得分:1)

假设输入来自文件,

  • Get-Content file.txt -raw
  • 用标尺lookahead分成标尺行开头确定的部分
  • 使用Where-Object来按部分中的唯一单词进行过滤

$Unique = [regex]::Escape("[ abc")
(Get-Content .\file.txt -raw) -split '(?M)(?=^--------\[)' -ne '' |
    Where-Object { $PSItem -match $Unique}

示例输出:

--------[ abc不好 ]----------------------------------------------------------------------------------------------------

    好string1                                              description1
    string2                                         description2
    好string3                                              description3
    string4                                          ---[ 太好了 ]----description4好2

编辑:适应了更改的需求的脚本

$Unique = 'abc不好|太好cde|c高速缓存 \/ L1-Cache|内存阵列 \/ System Memory'
(Get-Content .\SU_56606905.txt -raw) -split '(?M)(?=(^--------\[|^  \[))'|
    Where-Object { $PSItem -match $Unique}

示例输出:

--------[ abc不好 ]----------------------------------------------------------------------------------------------------


  [ c高速缓存 / L1-Cache ]

    高速缓存:
      类型                                              数据
      状态                                              已启用



  [ 内存阵列 / System Memory ]

    内存阵列:
      位置                                              主板
      内存阵列功能                                      系统内存


--------[ 太好cde ]----------------------------------------------------------------------------------------------------


    了string1                                              description1
    string3                                              description3
    string4                                          ---[ 太好了 ]----description4好b