Моя строка в Python отделена \ n символом новой строки в конце:

mystring = "owner: uid=rocdsc,ou=People,dc=fcd,dc=test,dc=com
member: uid=absylor12,ou=people,dc=fcd,dc=test,dc=com
member: uid=amslsmith,ou=people,dc=fcd,dc=test,dc=com
member: uid=amis,ou=people,dc=fcd,dc=test,dc=com
member: uid=null,ou=people,dc=fcd,dc=test,dc=com""

Есть ли лучший способ для создания массива UID только следующим образом:

[rocdsc, absylor12, amslsmith, amis]

Без

значение NULL

В списке массивов.

Я старался:

uids= [name.strip() for name in mystring .split("\n")]        

    if len(uids)>0:
        for index in range(len(uids))
            #print 'Current UIDs:', uids[index].split(":")
            uids[0] = uids[0].split("=")[1].strip()
    print uids
-1
Milson 14 Мар 2018 в 05:28

2 ответа

Лучший ответ

Если вы не пробовали регулярные выражения:

import re
r = re.compile(r'uid=(\w+)')
r.findall(mystring)

Если вы хотите удалить ноль, вы можете filter(lambda x: x != 'null', r.findall(mystring)) (еще одна итерация)

И это регулярное выражение работает, но также удалит все идентификаторы, начинающиеся со слова null

re.compile(r'uid=((?!null)\w+)').findall(mystring)
1
Lorenzo Peña 14 Мар 2018 в 03:01
#!python2

import re

mystring = "owner: uid=rocdsc,ou=People,dc=fcd,dc=test,dc=com, member: uid=absylor12,ou=people,dc=fcd,dc=test,dc=com, member: uid=amslsmith,ou=people,dc=fcd,dc=test,dc=com, member: uid=amis,ou=people,dc=fcd,dc=test,dc=com, member:, uid=null,ou=people,dc=fcd,dc=test,dc=com"

# pattern definition
p = 'uid='

# holds user names
users = []

# split string on a space or a comma, find user id, append to list
for item in re.split(' |,|', mystring):
    if item.startswith(p):
        users.append(item.replace(p, ''))

print users
1
Michael Swartz 14 Мар 2018 в 03:18