Как разделить пробелы переднего края для каждой строки в строковой переменной `interface_info` перед анализом? - PullRequest
0 голосов
/ 28 декабря 2018
import re     
interface_info = '''  
    phy#3  
            Interface wlan1-cabin-2  
                    ifindex 37  
                    wdev 0x300000003  
                    addr 06:53:1a:4e:07:02  
                    ssid SSIDTEST3  
                    type AP  
                    channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz  
            Interface wlan1-cabin-1  
                    ifindex 36  
                    wdev 0x300000002  
                    addr 06:53:1a:4e:07:01  
                    ssid SSIDTEST2  
                    type AP  
                    channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz  
            Interface wlan1  
                    ifindex 7  
                    wdev 0x300000001  
                    addr 06:53:1a:4e:07:00  
                    ssid SSID1  
                    type AP  
                    channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz  
    phy#2  
            Interface wlan0  
                    ifindex 6  
                    wdev 0x200000001  
                    addr 00:30:1a:4e:07:ac  
                    type managed  
    '''  
    stripped = interface_info.lstrip(' \t\n\r')  
    ssid_regex = re.compile('Interface wlan1-cabin-2+((.*\n){6})')  
    ssid_extract = re.search(ssid_regex, stripped)  
    interface_split = re.split(r'\n', ssid_extract.group(0))  
    ssid = str(interface_split[4]).strip(' ssid ')  

    print(stripped)
    print (ssid_extract)
    print str(interface_split)
    print (ssid)

Вывод:

<b> 
<_sre.SRE_Match object at 0x7fb1665e2250>  
['Interface wlan1-cabin-2', '                ifindex 37', '                wdev 0x300000003', '                addr 06:53:1a:4e:07:02', '                ssid SSIDTEST3', '                type AP', '']  
SSIDTEST3`
</b>

При выводе приведенного выше кода обратите внимание, что каждая строка в списке имеет пробелы переднего края.Я пытаюсь отключить / удалить эти пробелы до того, как строки окажутся в списке.

1 Ответ

0 голосов
/ 31 декабря 2018

Использование lstrip удалит только пробельные символы до phy#3

Что вы можете сделать, это использовать полосу на всех элементах, возвращенных из split, используя str.strip и карта:

interface_split = map(str.strip, re.split(r'\n', ssid_extract.group(0)))

См. демонстрационную версию Python

Если вы хотите удалить только пробельные символы слева, другим подходом может быть сначала удалить всеведущие пробельные символы из вашей строки с помощью ^\s+ с re.sub и компиляцией регулярного выражения с многострочным флагом:

stripped = re.sub(re.compile('^\s+', re.MULTILINE), '', interface_info)

См. демонстрационную версию Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...