Извлечение значений из строки - PullRequest
4 голосов
/ 19 января 2010

Я пытаюсь извлечь значения из строки, я пытался заставить работать re.match, но не получилось Строка:

'/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n'

Я пробовал:

 map(int,re.search("Value\s*=\s*").group(1))

, а также:

'/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n'.split(' = ')

Я не уверен, что еще можно добавить или сделать. Я хочу получить атрибуты 'Value, Max, Step' и их значения. Есть ли способ сделать это?

Спасибо за любую помощь

Ответы [ 4 ]

6 голосов
/ 19 января 2010

Для этой конкретной строки следующий текст анализируется в словаре:

s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n'
d = {}
for pair in [val.split('=') for val in s.split('\r\n')[1:-1]]:
    d[pair[0]] = int(pair[1])
3 голосов
/ 19 января 2010
>>> s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n'
>>> bits = s.split('\r\n')
>>> val, max_val, step = [int(bits[i].partition(' = ')[2]) for i in [1, 3, 4]]
>>> val
1800
>>> max_val
3600
>>> step
1
0 голосов
/ 19 января 2010

Вы пытаетесь использовать регулярное выражение, но я думаю, что вы можете просто разделить его на \r\n и затем использовать значения с =.

Что-то вроде:

s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n'
dct = {}
arr = [ss for ss in s.split('\r\n') if '=' in ss]
for e in arr:
    k, v = e.split(' = ')
    dct[k] = v
print dct
0 голосов
/ 19 января 2010
s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n'
data = {}

for l in s.split('\r\n'):
     if " = " in l:
             k,v = l.split(" = ")
             data[k] = int(v)

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