Python- Generic / Inbuilt函数解码字符串

时间:2014-02-18 06:51:30

标签: python regex

我想解码一个字符串

abc,1236,hg898,111112222,XXXX

格式如下

Format: pincode ,sid, xyz,DSP,4-Character code.

其他样本可以是这样的

abc1236hg898111112222XXXX

`

Format: 
     pincode=first 3 letters , 
     sid = first next 4 letters,
     xyz = next 5 letters,
     DSP = next 9 letters,
     4-Character code = last 4 letters.

pincode = %3s sid = %4s xyz = %5s DSP = %9s 4-Charchode = %4s `

所以基本上我想要一个通用函数,可以为我解码字符串格式。

所以,函数应该是

def string_decoder(string,format):
    #return the dict having keys as format keys and values as their respective values

我该怎么做?

Python中是否存在内置函数?

3 个答案:

答案 0 :(得分:2)

import re
match = re.match(r'''(.{3}),?
                     (.{4}),?
                     (.{5}),?
                     (.{9}),?
                     (.{4})''', string, flags=re.VERBOSE)
if match:
    pin, sid, xyz, dsp, fourcharcode = match.groups()
else:
    handle_error()

.{3}表示3个任意字符。 ,?表示可选的逗号。围绕.{3}的括号将3个任意字符保存为捕获组。合并后,此正则表达式将输入字符串分为3个,4个,5个,9个和4个字符的组,可选地在它们之间使用逗号。

如果要将组的数量和大小指定为函数的参数,可以在运行时构建正则表达式:

def break_groups(string, *sizes):
    regex = r',?'.join(r'(.{%d})' % size for size in sizes)
    match = re.match(regex, string)
    if match:
        return match.groups()
    else:
        raise SomeSortOfError

答案 1 :(得分:0)

您可以在String上使用split函数  例如:

a="abc,1236,hg898,111112222,XXXX"
b=a.strip()
print b
b=[abc,1236,hg898,111112222,XXXX]

现在你可以通过索引获得价值

print b[0]
>>> abc

答案 2 :(得分:-1)

def string_decoder(string, format):
    ret = {}
    if len(string) == len(format):
        for item in string:
            ret[format] = string
    else:
        print 'input wrong!'