我不知道你想输出的确切类型,但我想我有一个如何使用正则表达式来创建一个有用的数据结构的想法,与'name'
和'ip'
标签。
从REPL:
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)
试图尽可能多地匹配str
上的regex
。输出是2元组的list
,其中每个元组的第一个元素是来自正则表达式第一个捕获括号的匹配,第二个元素是来自正则表达式第二个捕获括号的匹配。
有关Python正则表达式的更多详细信息,请参阅http://docs.python.org/2/library/re.html。
我不确定这是为什么我问“json格式?”在我的问题。但从你的答案看来,它不是。 – user2873882
是的,我在这里很新,我不明白你为什么说我的语气没有建设性,我不确定这是不是Json格式。我不是故意感情,我只是在建议之后。对不起,如果有任何误解。 – user2873882
所以如果你说标签可以包含空格,那么“玩家数量:2”是如何分析的 - 作为“玩家”,“数量:2”还是“玩家数”:2''? – fjarri