Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 选择花括号内的所有内容_Regex_Powershell - Fatal编程技术网

Regex 选择花括号内的所有内容

Regex 选择花括号内的所有内容,regex,powershell,Regex,Powershell,我们能不能就这样得到结果 edf560af-db87-11e3-80d2-806e6f6e6963 faadf429-db69-11e3-919f-e0db55bf0b1b 尝试 (Get-WmiObject Win32_Volume |select deviceid) -replace '\D' # removes all except numbers 这是命令 Get-WmiObject Win32_Volume |select deviceid deviceid

我们能不能就这样得到结果

edf560af-db87-11e3-80d2-806e6f6e6963
faadf429-db69-11e3-919f-e0db55bf0b1b
尝试

(Get-WmiObject Win32_Volume |select  deviceid) -replace '\D'
# removes all except numbers
这是命令

Get-WmiObject Win32_Volume |select  deviceid

deviceid                                                                                                                                                                               
--------                                                                                                                                                                               
\\?\Volume{edf560af-db87-11e3-80d2-806e6f6e6963}\                                                                                                                                      
\\?\Volume{faadf429-db69-11e3-919f-e0db55bf0b1b}\                                                                                                                                      
\\?\Volume{faadf42d-db69-11e3-919f-e0db55bf0b1b}\                                                                                                                                      
\\?\Volume{faadf433-db69-11e3-919f-e0db55bf0b1b}\                                                                                                                                      
\\?\Volume{faadf439-db69-11e3-919f-e0db55bf0b1b}\                                                                                                                                      
\\?\Volume{edf560b0-db87-11e3-80d2-806e6f6e6963}\                                                                                                                                      
\\?\Volume{edf560b1-db87-11e3-80d2-806e6f6e6963}\                                                                                                                                      
\\?\Volume{edf560b5-db87-11e3-80d2-806e6f6e6963}\  
试试这个正则表达式:

(?<=(Volume{))([\s\S]| |w\[0-9]| )+?(?=(}))
or simpler
(?<=Volume{).+(?=})

(?即使是try的一个变体也无法工作,因为它还包括卷中的
e

PS> (Get-WmiObject Win32_Volume |select  -expand deviceid) -replace '[^0-9a-f]'
ed0addcdf000000000000100000000000
ed0addcdf000000000000501f00000000
e775fc6ae9c7511e7b58e10604b928269
e2367fe0e45e311e6b548806e6f6e6963
下面是另一个工作解决方案,使用:


Get WmiObject Win32_Volume | Select String'(?您似乎只想捕获左花括号和右花括号之间的十六进制数字

PS C:\src\t> cat .\dsm.ps1
Get-CimInstance CIM_StorageVolume |
    Select-Object DeviceID |
    ForEach-Object { $_ -match ".*{([-0-9a-fA-F]*)}.*" } |
    ForEach-Object { $matches[1] -replace '-' }
输出为:

PS C:\src\t> .\dsm.ps1
04ec358ff8bc11e3bac6806e6f6e6963
04ec3590f8bc11e3bac6806e6f6e6963
2bd2c32a00000000000090b4e8000000
c0adb44bbbcc11e5b3e7806e6f6e6963

第一个建议保留了
Volume
中的
e
(注意结果字符串的宽度是33个字符,而不是32个字符)
PS C:\src\t> .\dsm.ps1
04ec358ff8bc11e3bac6806e6f6e6963
04ec3590f8bc11e3bac6806e6f6e6963
2bd2c32a00000000000090b4e8000000
c0adb44bbbcc11e5b3e7806e6f6e6963