是否可以有效地分解这样的字符串:
'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
我尝试使用正则表达式模式和复杂的循环,但是我走得很远。
答案 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:
后跟任意数字。 答案 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