Python正则表达式匹配问题并将多个组分组

时间:2014-05-21 16:06:36

标签: python regex

我正在尝试解析命令输出,如下所示:

2.437 GHz (Channel 6)
Quality=39/70  Signal level=-71 dBm
Encryption key:on
ESSID:"testssid"
IE: IEEE 802.11i/WPA2 Version 1
IE: WPA Version 1

..并且基本上将其转换为:

channel = 6
quality = "39/70"
signal = -71
encryption = true
essid = "testssid"
wpa = true

我对正则表达式并不是特别擅长但是我试图提取这些字段:

    m = re.search('Channel (.+)\)', n)
    if m:
            print m.group(1)

    m = re.search('Quality\=(.{5})', n)
    if m:
            print m.group(1)

    m = re.search('level\=(.+)', n)
    if m:
            print m.group(1)

    m = re.search('key\:(.+)', n)
    if m:
            print m.group(1)

    m = re.search('ESSID\:\"(.+?)\"', n)
    if m:
            print m.group(1)

输出:

6
39/70
-71 dBm
off
testssid

有两个问题:第一个是'质量'值,因为我有一个硬编码值,如果匹配短于5个字符可能会破坏,第二个是'信号值',我宁愿没有“dBM”部分。我想在这两种情况下我都希望匹配到下一个空格字符,但是无法使用\s

此外,让一些re.search操作看起来杂乱无章,是否有办法将这些操作结合起来或整理一下?

感谢。

1 个答案:

答案 0 :(得分:2)

re.search('Quality\=(\d+/\d+)', n) #matches a number a slash and a number #/#
re.search('level\=([+-]?\d+)', n) #matches 1 or more numbers so ignore dbm

清理你可以做的

patterns = {'quality':'Quality\=(\d+/\d+)',
            'level': 'level\=([+-]?\d+)',
            'key':'key\:(.+)',
            'channel':'Channel (.+)\)'}
body_of_text = open("somefile.txt").read()
results = dict([(key,re.search(regex,body_of_text).group(1)) for  key,regex in patterns.items()])
print results
相关问题