pdp320921 发表于 2011-4-13 15:54:04

[已解决]如何用正则提取指定字符?

本帖最后由 pdp320921 于 2011-6-11 14:42 编辑


    Driver                  : Realtek RTL8188CE Wireless LAN 802.11n PCI-E NIC
    Vendor                  : Realtek Semiconductor Corp.
    Provider                  : Realtek Semiconductor Corp.
    Date                      : 2010/10/15
    Version                   : 1005.6.1015.2010
    INF file                  : C:\windows\INF\oem14.inf
    Files                     : 2 total
                              C:\windows\system32\DRIVERS\rtl8192Ce.sys
                              C:\windows\system32\drivers\vwifibus.sys
    Type                      : Native Wi-Fi Driver
    Radio types supported   : 802.11n 802.11g 802.11b
    FIPS 140-2 mode supported : No
如何提取Realtek RTL8188CE Wireless LAN 802.11n PCI-E NIC
                         802.11n 802.11g 802.11b

我的正则
(?:Driver\s*:\s*)([\w.\s\-]+)
(?:Radio types supported\s*:\s*)([\w.\s]*)
发现提取的结果是Realtek RTL8188CE Wireless LAN 802.11n PCI-E NIC Vendor
                     802.11n 802.11g 802.11b FIPS

多提取了下一行的字符。
有没有一行的终止符 or忽略换行符?
恳请大虾们指点下~~

afan 发表于 2011-4-13 16:18:27

本帖最后由 afan 于 2011-4-13 16:21 编辑

#include <Array.au3>
Local $Str = _
                '    Driver                  : Realtek RTL8188CE Wireless LAN 802.11n PCI-E NIC' & @CRLF & _
                '    Vendor                  : Realtek Semiconductor Corp.' & @CRLF & _
                '    Provider                  : Realtek Semiconductor Corp.' & @CRLF & _
                '    Date                      : 2010/10/15' & @CRLF & _
                '    Version                   : 1005.6.1015.2010' & @CRLF & _
                '    INF file                  : C:\windows\INF\oem14.inf' & @CRLF & _
                '    Files                     : 2 total' & @CRLF & _
                '                              C:\windows\system32\DRIVERS\rtl8192Ce.sys' & @CRLF & _
                '                              C:\windows\system32\drivers\vwifibus.sys' & @CRLF & _
                '    Type                      : Native Wi-Fi Driver' & @CRLF & _
                '    Radio types supported   : 802.11n 802.11g 802.11b' & @CRLF & _
                '    FIPS 140-2 mode supported : No'
Local $Test = StringRegExp($str, '(?s)Driver\h+:\h(\V+).+?supported\h+:\h(\V+)', 1)
_ArrayDisplay($Test, UBound($Test))

haijie1223 发表于 2011-4-13 17:47:55

学习了 感谢afan

love5173 发表于 2011-4-13 18:16:31

(?s)Driver.*?:\h(\V+).*Radio.*?:\h(\V+)
另外向afan学习

pdp320921 发表于 2011-4-15 22:49:44

回复 2# afan

感谢A版!

如果提取空白字符呢?
例如:
Interface name : Wireless Network Connection
There are 6 networks currently visible.

    SSID 1 :
    Network type            : Infrastructure
    Authentication          : WPA-Personal
    Encryption            : TKIP
我想提取SSID 1 :后面的空白怎么弄?

afan 发表于 2011-4-15 22:54:18

SSID 1 :(\h+)这意思?

easefull 发表于 2011-4-15 23:43:32

本帖最后由 easefull 于 2011-4-16 00:02 编辑

做题#include <Array.au3>
Local $sText    = _
                '    Driver                  : Realtek RTL8188CE Wireless LAN 802.11n PCI-E NIC' & @CRLF & _
                '    Vendor                  : Realtek Semiconductor Corp.' & @CRLF & _
                '    Provider                  : Realtek Semiconductor Corp.' & @CRLF & _
                '    Date                      : 2010/10/15' & @CRLF & _
                '    Version                   : 1005.6.1015.2010' & @CRLF & _
                '    INF file                  : C:\windows\INF\oem14.inf' & @CRLF & _
                '    Files                     : 2 total' & @CRLF & _
                '                              C:\windows\system32\DRIVERS\rtl8192Ce.sys' & @CRLF & _
                '                              C:\windows\system32\drivers\vwifibus.sys' & @CRLF & _
                '    Type                      : Native Wi-Fi Driver' & @CRLF & _
                '    Radio types supported   : 802.11n 802.11g 802.11b' & @CRLF & _
                '    FIPS 140-2 mode supported : No'
Local $sRegExp= '(?<=: ).+?\n'
Local $asResult = StringRegExp($sText, $sRegExp, 1)

If @error Then
        MsgBox(4096, "", "返回结果非数组" &@LF& $asResult)
Else
        For $i = 0 To UBound($asResult) - 1 Step 1
                If StringLen($asResult[$i]) > 4094 Then
                        Local $IsCut = MsgBox(4096 + 48 + 4 + 256, "警告", "数组元素 $asResult[" & $i & "]长度超出显示界限(4094)" & @LF & "是否需要截取字符串?")
                        If $IsCut = 6 Then $asResult[$i] = StringLeft($asResult[$i], 4094)
                EndIf
        Next
        _ArrayDisplay($asResult)
EndIf

Exit读题错误
继续向afan学习...

pdp320921 发表于 2011-4-16 15:40:56

本帖最后由 pdp320921 于 2011-4-16 15:42 编辑

回复 6# afan

谢A版~

其实是想提取   SSID 1 : XXXX
xxx的内容,不管是什么字符,包括空白(但不包括下一行的字符)

afan 发表于 2011-4-16 18:00:56

回复 8# pdp320921


    SSID 1 :(\V+)

love5173 发表于 2011-4-16 18:17:40

为什么不是(.*)afan是不是?s 用多了,有阴影

afan 发表于 2011-4-16 18:20:08

本帖最后由 afan 于 2011-4-16 22:55 编辑

为什么不是(.*)afan是不是?s 用多了,有阴影
love5173 发表于 2011-4-16 18:17 http://www.autoitx.com/images/common/back.gif


    .会捕捉到回车符,没阴影~

btw, 积分1万整,拍照~

love5173 发表于 2011-4-16 18:27:09

回复 11# afan
跟着您的身影来了,忘记了看上下文,单纯看来楼主的最后一次留言,嘿嘿

pdp320921 发表于 2011-4-16 20:16:53

回复 9# afan

可以不依赖SSID 1吗?因为可能是SSID 2或其他SSID n~~

easefull 发表于 2011-4-16 20:25:57

回复afan

可以不依赖SSID 1吗?因为可能是SSID 2或其他SSID n~~
pdp320921 发表于 2011-4-16 20:16 http://www.autoitx.com/images/common/back.gif


SSID\s\d+\s:\s(\V+)
看来这问题很困扰你啊,都快晕成伸手党了

pdp320921 发表于 2011-4-16 21:13:46

回复 14# easefull
听你这话纠结~
只是自己写的会直接提取到下一行的字符,而不知怎么去提取一行终止!
页: [1] 2
查看完整版本: [已解决]如何用正则提取指定字符?