繁体   English   中英

PowerShell 从字符串中提取文本

[英]PowerShell Extracting text from a string

当谈到正则表达式时,我真的很糟糕,现在已经坚持了一段时间。 如何从以下字符串中获取人 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

提前致谢!

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

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

上述正则表达式的解释:

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

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

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

您可以在此处找到上述正则表达式的演示。

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文件中打印您想要的 output。 请注意,在select-string命令中仅捕获组 1 我使用$_.Matches.groups[1]

为了更好地了解上面使用的命令; 请参考这个。

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

示例 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"

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

它能做什么...

  • 构建要处理的多行字符串
  • 设置要拆分的前缀
  • 设置要拆分的后缀
  • 在前缀上拆分
  • 抓取结果数组中的最后一项
  • 在后缀上拆分
  • 抓取该数组中的第一项
  • 修剪掉任何前导或尾随空格
  • 将值分配给 $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

output = Person A

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM