问个正则换行提取【已解决】感谢A版!
本帖最后由 fybhwsx 于 2020-4-3 19:49 编辑用A版的Au3.REHelper_1.5.1,只会简单的单行提取一些东西,感谢A版的工具。。
我想要提取:
DeviceID : \\.\PHYSICALDRIVE2这行末尾的(数字)
Model : INTEL SSDSA2M080G2GC 这行Model : (需要的字符)
SerialNumber : CVPO011303WM080BGN 这行 SerialNumber :(需要的字符)
……
整理格式:中间加两个空格
2INTEL SSDSA2M080G2GCCVPO011303WM080BGN
……
### 友情提示:本脚本由 Au3.REHelper 于 2020/04/03 18:02 自动生成,不保证其正确性,请自行测试 ###
#include <Array.au3>
Local $sSource = _
@CRLF & _
'__GENUS : 2' & @CRLF & _
'__CLASS : Win32_DiskDrive' & @CRLF & _
'__SUPERCLASS :' & @CRLF & _
'__DYNASTY :' & @CRLF & _
'__RELPATH : Win32_DiskDrive.DeviceID="\\\\.\\PHYSICALDRIVE1"' & @CRLF & _
'__PROPERTY_COUNT : 3' & @CRLF & _
'__DERIVATION : {}' & @CRLF & _
'__SERVER :' & @CRLF & _
'__NAMESPACE :' & @CRLF & _
'__PATH :' & @CRLF & _
'DeviceID : \\.\PHYSICALDRIVE1' & @CRLF & _
'Model : INTEL SSDSA2CW080G3' & @CRLF & _
'SerialNumber : CVPR149606A0080BGN' & @CRLF & _
'PSComputerName :' & @CRLF & @CRLF & _
'__GENUS : 2' & @CRLF & _
'__CLASS : Win32_DiskDrive' & @CRLF & _
'__SUPERCLASS :' & @CRLF & _
'__DYNASTY :' & @CRLF & _
'__RELPATH : Win32_DiskDrive.DeviceID="\\\\.\\PHYSICALDRIVE0"' & @CRLF & _
'__PROPERTY_COUNT : 3' & @CRLF & _
'__DERIVATION : {}' & @CRLF & _
'__SERVER :' & @CRLF & _
'__NAMESPACE :' & @CRLF & _
'__PATH :' & @CRLF & _
'DeviceID : \\.\PHYSICALDRIVE0' & @CRLF & _
'Model : Romex RAMDISK SCSI Device' & @CRLF & _
'SerialNumber : SN-FANCYRD20082011' & @CRLF & _
'PSComputerName :' & @CRLF & @CRLF & _
'__GENUS : 2' & @CRLF & _
'__CLASS : Win32_DiskDrive' & @CRLF & _
'__SUPERCLASS :' & @CRLF & _
'__DYNASTY :' & @CRLF & _
'__RELPATH : Win32_DiskDrive.DeviceID="\\\\.\\PHYSICALDRIVE2"' & @CRLF & _
'__PROPERTY_COUNT : 3' & @CRLF & _
'__DERIVATION : {}' & @CRLF & _
'__SERVER :' & @CRLF & _
'__NAMESPACE :' & @CRLF & _
'__PATH :' & @CRLF & _
'DeviceID : \\.\PHYSICALDRIVE2' & @CRLF & _
'Model : INTEL SSDSA2M080G2GC' & @CRLF & _
'SerialNumber : CVPO011303WM080BGN' & @CRLF & _
'PSComputerName :'
;~MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, 'DeviceID .*(\d+)', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中元素为: ' & $aSRE)
_ArrayDisplay($aSRE, UBound($aSRE))
Local $sSource = 你的数据
Local $sSRERe = StringRegExpReplace($sSource, '(?si)^.+?\vDeviceID\h*:\V+?(\d*)\v+Model\h+:\h*(\V*)\v+SerialNumber\h*:\h*(\V*)\v+.+', '\1\2\3')
MsgBox(0, '替换结果', $sSRERe) 感谢A版,是我没说清楚,我想要的应该有3组数据,提取整理格式如下,麻烦再看下。。
1INTEL SSDSA2CW080G3CVPR149606A0080BGN
0Romex RAMDISK SCSI DeviceSN-FANCYRD20082011
2INTEL SSDSA2M080G2GCCVPO011303WM080BGN fybhwsx 发表于 2020-4-3 19:36
感谢A版,是我没说清楚,我想要的应该有3组数据,提取整理格式如下,麻烦再看下。。
1INTEL SSDSA2CW080 ...
那就用匹配模式,不管多少组,获取后以3步进取数组连接即可
Local $aSRE = StringRegExp($sSource, '(?i)DeviceID\h*:\V+?(\d*)\v+Model\h+:\h*(\V*)\v+SerialNumber\h*:\h*(\V*)\v+', 3)
_ArrayDisplay($aSRE, UBound($aSRE)) afan 发表于 2020-4-3 19:43
那就用匹配模式,不管多少组,获取后以3步进取数组连接即可
嗯嗯,谢谢! fybhwsx 发表于 2020-4-3 19:47
嗯嗯,谢谢!
这个是哪个命令行程序的输出
页:
[1]