找回密码
 加入
搜索
查看: 10847|回复: 19

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

 火.. [复制链接]
发表于 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忽略换行符?
恳请大虾们指点下~~
发表于 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))
发表于 2011-4-13 17:47:55 | 显示全部楼层
学习了 感谢afan
发表于 2011-4-13 18:16:31 | 显示全部楼层
(?s)Driver.*?:\h(\V+).*Radio.*?:\h(\V+)
另外向afan学习
 楼主| 发表于 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 :后面的空白怎么弄?
发表于 2011-4-15 22:54:18 | 显示全部楼层
SSID 1 :(\h+)
这意思?
发表于 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学习...
 楼主| 发表于 2011-4-16 15:40:56 | 显示全部楼层
本帖最后由 pdp320921 于 2011-4-16 15:42 编辑

回复 6# afan

谢A版~

其实是想提取
   SSID 1 : XXXX
xxx的内容,不管是什么字符,包括空白(但不包括下一行的字符)
发表于 2011-4-16 18:00:56 | 显示全部楼层
回复 8# pdp320921


    SSID 1 :(\V+)
发表于 2011-4-16 18:17:40 | 显示全部楼层
为什么不是(.*)afan是不是?s 用多了,有阴影
发表于 2011-4-16 18:20:08 | 显示全部楼层
本帖最后由 afan 于 2011-4-16 22:55 编辑
为什么不是(.*)afan是不是?s 用多了,有阴影
love5173 发表于 2011-4-16 18:17



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

btw, 积分1万整,拍照~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-4-16 18:27:09 | 显示全部楼层
回复 11# afan
跟着您的身影来了,忘记了看上下文,单纯看来楼主的最后一次留言,嘿嘿
 楼主| 发表于 2011-4-16 20:16:53 | 显示全部楼层
回复 9# afan

可以不依赖SSID 1吗?因为可能是SSID 2或其他SSID n~~
发表于 2011-4-16 20:25:57 | 显示全部楼层
回复  afan

可以不依赖SSID 1吗?因为可能是SSID 2或其他SSID n~~
pdp320921 发表于 2011-4-16 20:16



SSID\s\d+\s:\s(\V+)
看来这问题很困扰你啊,都快晕成伸手党了
 楼主| 发表于 2011-4-16 21:13:46 | 显示全部楼层
回复 14# easefull
听你这话纠结~
只是自己写的会直接提取到下一行的字符,而不知怎么去提取一行终止!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-12 00:23 , Processed in 0.092580 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表