Takže mám tento riadok, teda niekoľko.
<drives name="drive 1" deviceid="\.PHYSICALDRIVE0" interface="SCSI" totaldisksize="136,7">
a
<drives name="drive 1" deviceid="\.PHYSICALDRIVE0" interface="SCSI" totaldisksize="1367">
Mám tento riadok, ktorý zodpovedá číslu medzi úvodzovkami:
$(Select-String totaldisksize $Path*.xml).line -replace ".*totaldisksize="(d+,d+)".*","$1"
Ktorý bude zodpovedať 136,7, ale nie 1367.
Je možné zhodovať sa s oboma?
Ďakujem.
odpovede:
0 pre odpoveď č. 1Len si urob ,
vo vašom regulárnom výraze ako voliteľné pridaním ?
kvantifikátor vedľa ,
.
$(Select-String totaldisksize $Path*.xml).line -replace ".*totaldisksize="(d+,?d+)".*","$1"
OR
$(Select-String totaldisksize $Path*.xml).line -replace ".*totaldisksize="(d+(?:,d+)*)".*","$1"
Pravidelný výraz:
( group and capture to 1:
d+ digits (0-9) (1 or more times)
(?: group, but do not capture (0 or more
times):
, ","
d+ digits (0-9) (1 or more times)
)* end of grouping
) end of 1
2 pre odpoveď č. 2
istá:
$xmlfile = "C:pathtooutput.xml"
& cscript sydi-server.vbs -t. -ex -o$xmlfile
[xml]$sysinfo = Get-Content $xmlfile
$driveinfo = $sysinfo.SelectNodes("//drives") |
select name, @{n="DiskSize";e={[Double]::Parse($_.totaldisksize)}}
Poznámka: Nerozoberajte XML pomocou regulárnych výrazov. Zničí to vašu dušu a prinúti mačičky zomrieť v bolestiach.