fybhwsx 发表于 2020-4-3 19:08:53

问个正则换行提取【已解决】感谢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))




afan 发表于 2020-4-3 19:18:10

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)

fybhwsx 发表于 2020-4-3 19:36:37

感谢A版,是我没说清楚,我想要的应该有3组数据,提取整理格式如下,麻烦再看下。。
1INTEL SSDSA2CW080G3CVPR149606A0080BGN
0Romex RAMDISK SCSI DeviceSN-FANCYRD20082011
2INTEL SSDSA2M080G2GCCVPO011303WM080BGN

afan 发表于 2020-4-3 19:43:44

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))

fybhwsx 发表于 2020-4-3 19:47:24

afan 发表于 2020-4-3 19:43
那就用匹配模式,不管多少组,获取后以3步进取数组连接即可

嗯嗯,谢谢!

itsky2 发表于 2020-4-5 12:45:51

fybhwsx 发表于 2020-4-3 19:47
嗯嗯,谢谢!

这个是哪个命令行程序的输出
页: [1]
查看完整版本: 问个正则换行提取【已解决】感谢A版!