2017-01-25 7 views
0

У меня есть эта строка - E1(05): 12 13 16 18 24 E2(01):13 - и все, что я хочу Спинка:Python извлечения строки и зачистки

  • содержимое после E1 т.е. 05,
  • список из 5 цифр, то есть 06 08 12 18 29,
  • содержание после E2 т.е. 01,
  • и, наконец, последнее число, то есть 13.

Я пробовал функцию 're', но он возвращает шестнадцатеричную строку и не может найти примеры, чтобы удалить/разделить это с успехом. Там ДОЛЖЕН быть элегантный способ решения этого.

+0

из этого Например, я понимаю, вам просто нужны все цифры из строки, не так ли? –

+0

* «... список из 5 номеров, например, 06 08 12 18 29» * Откуда вы получили эти цифры? – Tagc

+0

что должно быть сопоставлено с этим 'E1 (05): 12 13 16 18 24 E2 (01): 13' input:' [05, 01] '? – RomanPerekhrest

ответ

2

Вот один из способов использования re.findall() с использованием границ слов вокруг \d+ (для того, чтобы не соответствовать 1 в Е1, и т.д.):

In [9]: s = "E1(05): 12 13 16 18 24 E2(01):13" 

In [10]: re.findall(r'\b\d+\b', s) 
Out[10]: ['05', '12', '13', '16', '18', '24', '01', '13'] 
0

Вы можете сделать следующего

data = re.findall(r'\b\d+\b','YOUR_STRING') 
ans = [int(i) for i in data] 

Надеется, что это помогает !

+0

Это не работает. 'ans' is' [1, 5, 12, 13, 16, 18, 24, 2, 1, 13] ' – Tagc

+0

Вам просто нужно \ b отфильтровать эти материалы E1. Извините, я не узнал сначала –

+0

Правильно, но теперь ваш ответ по сути является дубликатом Kasramvd's. Единственное различие заключается в том, что вы явно конвертируете совпадения в целые числа, и неясно, хочет ли это то, что хочет OP. – Tagc

0

Учитывая вы хотите получить идентификатор этого E маркера и информации после того, вот простое решение:

import re 

data = " E1(05): 12 13 16 18 24 E2(01):13 " 

for v in data.split("E"): 
    if v.strip() == '': 
     continue 

    m = re.match(r'E.*?\((.*?)\):(.*)', 'E' + v) 
    e_id, e_data = m.group(1), [int(v) for v in m.group(2).split()] 
    print(e_id, e_data) 

Тогда вы получите что-то вроде этого:

('05', [12, 13, 16, 18, 24]) 
('01', [13]) 

 Смежные вопросы

  • Нет связанных вопросов^_^