在python中分解不同符号的字符串

时间:2018-12-13 16:21:21

标签: python regex string

是否可以有效地分解这样的字符串:

'G:1{l:3:"cat";v:30;l:3:"dog";v:0;l:5:"horse";v:20;l:6:"rabbit";v:50;}'

对此进行进一步处理:

"cat", 30
"dog", 0
"horse", 20
"rabbit", 50

我尝试使用正则表达式模式和复杂的循环,但是我走得很远。

4 个答案:

答案 0 :(得分:4)

您可以使用正则表达式查找模式:

import re

s = 'G:1{l:3:"cat";v:30;l:3:"dog";v:0;l:5:"horse";v:20;l:6:"rabbit";v:50;}'

re.findall(r'("[A-Za-z]+");v:(\d+)', s)
# [('"cat"', '30'), ('"dog"', '0'), ('"horse"', '20'), ('"rabbit"', '50')]

使用此列表,您应该能够以所需的格式获取它:

for row in re.findall(r'("[A-Za-z]+");v:(\d+)', s):
    print("{}, {}".format(*row))
# "cat", 30
# "dog", 0
# "horse", 20
# "rabbit", 50

答案 1 :(得分:2)

您可以使用以下模式,然后将其拆分:

import re

your_string = 'G:1{l:3:"cat";v:30;l:3:"dog";v:0;l:5:"horse";v:20;l:6:"rabbit";v:50;}'

result = [val.split('";v:') for val in re.findall('l:\d:"(\w+\";v:\d+);', your_string)]

输出

[['cat', '30'], ['dog', '0'], ['horse', '20'], ['rabbit', '50']]

答案 2 :(得分:1)

您可以尝试与此伴侣

\"[A-Za-z]+\"|(?<=v:)\d+
  

说明

  • \"[A-Za-z]+\"-匹配",后跟alphabet后跟的任意数量的"
  • |-交替与逻辑OR相同。
  • (?<=v:)\d+-匹配任何v:后跟任意数字。

Demo

答案 3 :(得分:1)

您可以使用:

import re
x = 'G:1{l:3:"cat";v:30;l:3:"dog";v:0;l:5:"horse";v:20;l:6:"rabbit";v:50;}'
r = re.findall(r'(".*?");v:(\d+)', x)
for y in r:
    print(f"{y[0]}, {y[1]}")

输出:

"cat", 30
"dog", 0
"horse", 20
"rabbit", 50

Python Demo