/ / Nájdite číslo medzi úvodzovkami - regex, powerhell

Nájdite číslo medzi úvodzovkami - regex, powerhell

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ď č. 1

Len 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"

DEMO

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.