代码之家  ›  专栏  ›  技术社区  ›  Ayush Lal

PowerShell从字符串中提取文本

  •  0
  • Ayush Lal  · 技术社区  · 4 年前

    说到Regex,我真的很糟糕,现在已经坚持了一段时间。我怎样才能得到 人A 从以下字符串?

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum<br>
    Affected: Lorem<br>
    Duty Officer: Person A<br>
    Affected: Ipsum
    

    提前感谢!

    1 回复  |  直到 4 年前
        1
  •  1
  •   Community Graeme Jensz    4 年前

    您可以使用以下正则表达式来实现您的结果:

    ^Duty Officer: ([\w ]+)$
    

    上述正则表达式的解释:

    ^ -表示给定测试字符串的开始。

    ([\w ]+) -表示捕获匹配任何单词字符( [0-9A-Za-z_] )随着 空间字符 (因为名称可能包含空格)一次或多次。

    $ -表示给定测试字符串的结尾。

    您可以找到上述正则表达式的演示 here.

    POWERSHELL命令:(您可以根据需要相应地更改命令)

    PS C:\Path\To\MyDesktop> $input_path='C:\Path\To\MyDesktop\test.txt'
    PS C:\Path\To\MyDesktop> $output_path='C:\Path\To\MyDesktop\testResult.txt'
    PS C:\Path\To\MyDesktop> $regex='^Duty Officer: ([\w ]+)$'
    PS C:\Path\To\MyDesktop> select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches.groups[1] } | % { $_.Value } > $output_file
    

    上述结果采用了您通过以下方式提供的输入 test.txt 文件并打印您所需的输出 testResult.txt 文件。 通知中 select-string 仅捕获我使用的组1的命令 $_.Matches.groups[1] .

    为了更好地了解上述命令;请参考 this.

        2
  •  0
  •   Joshua Rose    4 年前

    你可以通过使用索引来获取文本的特定部分。这通常被称为 substring powershell中的函数。您还可以使用 split 如果您想指定一个字符来分割文本,请使用函数。

    示例1

    $string_to_convert = "Duty Officer: Person A"
    $string_to_convert.Substring(14,22)
    >>> "Person A"
    

    示例2

    $string_to_convert = "Duty Officer: Person A"
    $string_to_convert.Split(" ")[2]
    >>> "Person A"
    
        3
  •  0
  •   Lee_Dailey    4 年前

    这里还有另一种方法。它假定数据是一个多行字符串,并且该字符串中只涉及一个目标文本块。

    它做什么。。。

    • 构建要处理的多行字符串
    • 设置要拆分的前缀
    • 设置要拆分的后缀
    • 前缀拆分
    • 获取结果数组中的最后一个项
    • 后缀拆分
    • 抓取该数组中的第一个项目
    • 修剪掉任何前导或尾随空格
    • 将值赋给$Var
    • 显示该值

    代码。。。

    # this presumes the data is ONE multiline string
    #     and that there are no other blocks of data in the string
    $InStuff = @'
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum<br>
    Affected: Lorem<br>
    Duty Officer: Person A<br>
    Affected: Ipsum
    '@
    
    $Prefix = 'Duty Officer:'
    $Suffix = '<br>'
    
    $DutyOfficer = (($InStuff -split $Prefix)[-1] -split $Suffix)[0].Trim()
    
    $DutyOfficer
    

    输出= Person A