Я не уверен в точности типа продукции вы хотите, но я думаю, что у меня есть представление о том, как создать полезную структуру данных с помощью регулярных выражений, с тегами 'name'
и 'ip'
.
С РЕПЛ:
In [38]: str = 'players 0 2 count:2 playerindex:0 playerid:a5:41:d2:cd:cd:05 ip:127.0.0.1:60488 name:127.0.0.1 model:softsqueeze displaytype:graphic-280x16 connected:1 playerindex:1 playerid:00:04:20:02:00:c8 ip:192.168.1.22:3483 name:Movy model:slimp3 displaytype:noritake-katakana connected:1'
In [39]: regex = re.compile(r'([^:]+):(\S+)\s')
In [40]: regex.findall(str)
Out[40]:
[('players 0 2 count', '2'),
('playerindex', '0'),
('playerid', 'a5:41:d2:cd:cd:05'),
('ip', '127.0.0.1:60488'),
('name', '127.0.0.1'),
('model', 'softsqueeze'),
('displaytype', 'graphic-280x16'),
('connected', '1'),
('playerindex', '1'),
('playerid', '00:04:20:02:00:c8'),
('ip', '192.168.1.22:3483'),
('name', 'Movy'),
('model', 'slimp3'),
('displaytype', 'noritake-katakana')]
Чтобы извлечь имя и IP-теги, вы можете использовать list comprehension:
lst = regex.findall(str)
In [45]: name_and_ip_tags = [x for x in lst if x[0] in ['ip', 'name']]
In [46]: name_and_ip_tags
Out[46]:
[('ip', '127.0.0.1:60488'),
('name', '127.0.0.1'),
('ip', '192.168.1.22:3483'),
('name', 'Movy')]
Регулярное выражение
([^:]+):(\S+)\s
работает как так:
Сначала ([^:]+)
соответствует всем остальным, а затем :
один или несколько раз, и круглые скобки вокруг этой части регулярного выражения хранят его как первый захват матча.
:
буквально просто соответствует :
.
(\S+)
соответствует всем, кроме пробела, один или несколько раз (из-за +
), и скобки делают его второй частью, захваченной совпадением.
\s
соответствует одному пространству, которое, кажется, отделяет все ваши записи.
Вызов regex.findall(str)
пытается соответствовать regex
по адресу str
столько раз, сколько может. Вывод - это list
из 2-х кортежей, где первый элемент каждого кортежа соответствует совпадению с первой скобкой скобок регулярного выражения, а второй элемент является совпадением со второй захватывающей скобкой регулярного выражения.
См. http://docs.python.org/2/library/re.html для получения дополнительной информации о регулярных выражениях в Python.
Я не был уверен, что именно поэтому я спросил «json formating?» в моем вопросе. Но из вашего ответа, похоже, нет. – user2873882
Да, я очень новичок здесь, я не понимаю, почему вы говорите, что мой тон не конструктивен, я не был уверен, что это было json-формирование. Я не собираюсь утверждать, что я был только после консультации. Извините, если возникли недоразумения. – user2873882
Итак, если вы говорите, что теги могут содержать пробелы, тогда как '' игроки подсчитывают: 2'' parsed - как '' игроки'', '' count: 2'' или '' "players count": 2''? – fjarri