所以我有这条线,还有几条。
<drives name="drive 1" deviceid="\\.\PHYSICALDRIVE0" interface="SCSI" totaldisksize="136,7">
和
<drives name="drive 1" deviceid="\\.\PHYSICALDRIVE0" interface="SCSI" totaldisksize="1367">
我的这一行与引号之间的数字相匹配:
$(Select-String totaldisksize $Path\*.xml).line -replace '.*totaldisksize="(\d+,\d+)".*','$1'
哪个匹配136,7但不匹配1367。
是否可以匹配两者?
谢谢。
答案 0 :(得分:2)
不确定
$xmlfile = 'C:\path\to\output.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)}}
注意:Do not parse XML with regular expressions。它会腐蚀你的灵魂,使catgirls痛苦地死去。
答案 1 :(得分:0)
只需在,
旁边添加?
量词,即可将正则表达式中的,
设为可选。
$(Select-String totaldisksize $Path\*.xml).line -replace '.*totaldisksize="(\d+,?\d+)".*','$1'
或强>
$(Select-String totaldisksize $Path\*.xml).line -replace '.*totaldisksize="(\d+(?:,\d+)*)".*','$1'
正则表达式:
( 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