我有以下字符串:
成员:{'姓名':A,'年龄':30,'性别':M,'身高':1.56},{'姓名':C,'年龄':20,'性别':M,'身高' : 1.8}, {'姓名': H, '年龄': 45, '性别': M, '身高': 1.97}, {'姓名': D, '年龄': 23, '性别': M, '高度':1.68};Place: 1 //成员: {'姓名': S, '年龄': 33, '性别': M, '身高': 1.4}, {'姓名': C, '年龄': 19, '性别': M,'身高':1.67},{'姓名':A,'年龄':44,'性别':M,'身高':1.92},{'姓名':C,'年龄':33,'性别':M,'高度':1.57};地点:2
我想知道是否有可能/如何进行这样的比赛:
[['30', '20', '45', '23', '1'], ['33', '19', '44', '33', '2']] or
[(['30', '20', '45', '23'], '1'), (['33', '19', '44', '33'], '2')]
Run Code Online (Sandbox Code Playgroud)
或者类似的东西(结果结构并不重要)我只需要拥有一个地方的所有年龄。我知道我可以迭代对每个部分或类似的解决方案进行拆分和应用正则表达式,但我的问题是是否有一种方法可以使用正则表达式执行一次(一个步骤)...
我会使用 findall 来获取所有“完整匹配项”。我的问题是将“元组”的第一个参数作为数组获取......
如果我做:
r = re.compile("'age': (\d+).*?; Place: (\d+).*?//")
g = r.findall("Members: {'name': A, 'age': 30, 'gender': M, 'height': 1.56}, {'name': C, 'age': 20, 'gender': M, 'height': 1.8}, {'name': H, 'age': 45, 'gender': M, 'height': 1.97}, {'name': D, 'age': 23, 'gender': M, 'height': 1.68}; Place: 1//Members: {'name': S, 'age': 33, 'gender': M, 'height': 1.4}, {'name': C, 'age': 19, 'gender': M, 'height': 1.67}, {'name': A, 'age': 44, 'gender': M, 'height': 1.92}, {'name': C, 'age': 33, 'gender': M, 'height': 1.57}; Place: 2")
Run Code Online (Sandbox Code Playgroud)
我只能得到第一个年龄,然后是地方......
g
[('30', '1')]
Run Code Online (Sandbox Code Playgroud)
[re.findall("(\d+)", i) for i in re.split("//", "Members: {'name': A, 'age': 30, 'gender': M}, {'name': C, 'age': 20, 'gender': M}, {'name': H, 'age': 45, 'gender': M}, {'name': D, 'age': 23, 'gender': M}; Place: 1//Members: {'name': S, 'age': 33, 'gender': M}, {'name': C, 'age': 19, 'gender': M}, {'name': A, 'age': 44, 'gender': M}, {'name': C, 'age': 33, 'gender': M}; Place: 2")]
[['30', '20', '45', '23', '1'], ['33', '19', '44', '33', '2']]
Run Code Online (Sandbox Code Playgroud)