如何使用PowerShell和Regex以任意顺序从字符串中提取数据?
我正在尝试使用PowerShell和Regex解决此问题。我有一个字符串变量,如下所示:如何使用PowerShell和Regex以任意顺序从字符串中提取数据?,regex,powershell,Regex,Powershell,我正在尝试使用PowerShell和Regex解决此问题。我有一个字符串变量,如下所示: $input = @" Server Time: 4/13/2016 12:29 PM Username: RBullwinkle Lorem ipsum dolor Important Data: rosebud sit amet "@; 我希望提取数据,以便收到以下结果: $serverTime = "4/13/2016 12:29 PM" $userName = "RBullwinkle" $imp
$input = @"
Server Time: 4/13/2016 12:29 PM
Username: RBullwinkle
Lorem ipsum dolor Important Data: rosebud sit amet
"@;
我希望提取数据,以便收到以下结果:
$serverTime = "4/13/2016 12:29 PM"
$userName = "RBullwinkle"
$important = "rosebud"
这将是一个简单的正则表达式,但以下情况除外:
您可以使用.NETFramework正则表达式,它将允许您进行全局(第一次匹配时不返回)匹配,并结合替换来匹配您想要的内容。很容易显示(检查您的匹配信息),powershell命令可能是这样的(无可否认,我不是powershell的家伙):
$myinput=@”
服务器时间:2016年4月13日下午12:29
用户名:RBullwinkle
Lorem ipsum dolor重要数据:玫瑰花蕾
"@
$myotherinput=@”
重要数据:水仙花很可爱
服务器时间:2016年4月13日下午12:29
用户名:RBullwinkle
"@
$pattern=“服务器\时间:\s?(?*)用户名:\s?(?*)重要\s数据:\s?(?\w+)
$mymatches=[regex]::匹配($myinput,$pattern)
$myothermatches=[regex]::匹配($myotherinput,$pattern)
$mymatches | ForEach对象{if($\.Success){echo$\.value}
#服务器时间:2016年4月13日下午12:29
#用户名:RBullwinkle
#重要数据:玫瑰花蕾
$myothermatches | ForEach对象{if($\.Success){echo$\.value}
#重要数据:水仙花
#服务器时间:2016年4月13日下午12:29
#用户名:RBullwinkle
您可以使用.NET framework正则表达式进行全局(第一次匹配时不返回)匹配,并结合替换以匹配所需内容。很容易显示(检查您的匹配信息),powershell命令可能是这样的(无可否认,我不是powershell的家伙):
$myinput=@”
服务器时间:2016年4月13日下午12:29
用户名:RBullwinkle
Lorem ipsum dolor重要数据:玫瑰花蕾
"@
$myotherinput=@”
重要数据:水仙花很可爱
服务器时间:2016年4月13日下午12:29
用户名:RBullwinkle
"@
$pattern=“服务器\时间:\s?(?*)用户名:\s?(?*)重要\s数据:\s?(?\w+)
$mymatches=[regex]::匹配($myinput,$pattern)
$myothermatches=[regex]::匹配($myotherinput,$pattern)
$mymatches | ForEach对象{if($\.Success){echo$\.value}
#服务器时间:2016年4月13日下午12:29
#用户名:RBullwinkle
#重要数据:玫瑰花蕾
$myothermatches | ForEach对象{if($\.Success){echo$\.value}
#重要数据:水仙花
#服务器时间:2016年4月13日下午12:29
#用户名:RBullwinkle
正则表达式的工作归功于@swaver2112,但我想我应该添加它来展示一种将这些信息转换为powershell对象的方法
$input1 = @'
Server Time: 4/13/2016 12:29 PM
Username: RBullwinkle
Lorem ipsum dolor Important Data: rosebud sit amet
'@
$input2 = @'
Lorem ipsum dolor Important Data: daffodils are lovely
Server Time: 4/13/2016 12:29 PM
Username: RBullwinkle
'@
$regex = 'Server\sTime:\s?(?<servertime>.*)|Username:\s?(?<username>.*)|Important\sData:\s?(?<importantdata>\w+)'
$matches1 = [regex]::matches($input1, $regex)
$matches2 = [regex]::matches($input2, $regex)
$hash1 = @{}
$matches1 | % {
if ($_.Success) {
$value = $_.value -split ': '
$hash1.Add($value[0].trim(), $value[1].trim())
}
}
$hash2 = @{}
$matches2 | % {
if ($_.Success) {
$value = $_.value -split ': '
$hash2.Add($value[0].trim(), $value[1].trim())
}
}
[pscustomobject]$hash1, [pscustomobject]$hash2
$input1=@'
服务器时间:2016年4月13日下午12:29
用户名:RBullwinkle
Lorem ipsum dolor重要数据:玫瑰花蕾
'@
$input2=@'
重要数据:水仙花很可爱
服务器时间:2016年4月13日下午12:29
用户名:RBullwinkle
'@
$regex='服务器\时间:\s?(?*)用户名:\s?(?*)重要数据:\s?(?\w+)
$matches1=[regex]:匹配($input1,$regex)
$matches2=[regex]:匹配($input2,$regex)
$hash1=@{}
$matches1 |%{
如果($\成功){
$value=$\.value-split':'
$hash1.Add($value[0].trim(),$value[1].trim())
}
}
$hash2=@{}
$matches2 |%{
如果($\成功){
$value=$\.value-split':'
$hash2.Add($value[0].trim(),$value[1].trim())
}
}
[pscustomobject]$hash1,[pscustomobject]$hash2
正则表达式的工作归功于@swaver2112,但我想我应该添加它来展示一种将这些信息转换为powershell对象的方法
$input1 = @'
Server Time: 4/13/2016 12:29 PM
Username: RBullwinkle
Lorem ipsum dolor Important Data: rosebud sit amet
'@
$input2 = @'
Lorem ipsum dolor Important Data: daffodils are lovely
Server Time: 4/13/2016 12:29 PM
Username: RBullwinkle
'@
$regex = 'Server\sTime:\s?(?<servertime>.*)|Username:\s?(?<username>.*)|Important\sData:\s?(?<importantdata>\w+)'
$matches1 = [regex]::matches($input1, $regex)
$matches2 = [regex]::matches($input2, $regex)
$hash1 = @{}
$matches1 | % {
if ($_.Success) {
$value = $_.value -split ': '
$hash1.Add($value[0].trim(), $value[1].trim())
}
}
$hash2 = @{}
$matches2 | % {
if ($_.Success) {
$value = $_.value -split ': '
$hash2.Add($value[0].trim(), $value[1].trim())
}
}
[pscustomobject]$hash1, [pscustomobject]$hash2
$input1=@'
服务器时间:2016年4月13日下午12:29
用户名:RBullwinkle
Lorem ipsum dolor重要数据:玫瑰花蕾
'@
$input2=@'
重要数据:水仙花很可爱
服务器时间:2016年4月13日下午12:29
用户名:RBullwinkle
'@
$regex='服务器\时间:\s?(?*)用户名:\s?(?*)重要数据:\s?(?\w+)
$matches1=[regex]:匹配($input1,$regex)
$matches2=[regex]:匹配($input2,$regex)
$hash1=@{}
$matches1 |%{
如果($\成功){
$value=$\.value-split':'
$hash1.Add($value[0].trim(),$value[1].trim())
}
}
$hash2=@{}
$matches2 |%{
如果($\成功){
$value=$\.value-split':'
$hash2.Add($value[0].trim(),$value[1].trim())
}
}
[pscustomobject]$hash1,[pscustomobject]$hash2
对于这种结构良好的数据,请使用convertfromstringdata
。你可以用很少的正则表达式来实现。只需要将:改为=就可以了。我有几篇关于这种方法的帖子。对于这种结构良好的数据,请使用convertfromstringdata
。你可以用很少的正则表达式来实现。只需要将:改为=就可以了。我有一些关于这种方法的帖子。