用Python正确解析字符串

时间:2015-11-21 16:50:14

标签: python string parsing

我在解析正确的方法时遇到了一些问题。我想将完整的字符串分成两个单独的字符串。然后删除“=” - 第一个字符串的符号和第二个字符串的“,” - 符号。根据我的输出,我可以得出结论,我做错了什么,但我似乎没有找到问题所在。我希望第一部分转换为整数,我已经尝试使用map(int,split())。

如果有人有提示,我会很感激。

这是我的输出:

('5=20=22=10=2=0=0=1=0=1', 'Vincent Appel,Johannes Mondriaan')

这是我的计划:

mystring = "5=20=22=10=2=0=0=1=0=1;Vincent Appel,Johannes Mondriaan"

def split_string(mystring):
    strings = mystring.split(";")
    x = strings[0]
    y = strings[-1]
    print(x,y)

def split_scores(x):
    scores = x.split("=")
    score = scores[0]
    names = scores[-1]
    stnames(names)
    print score

def stnames(y):
    studentname = y.split(",")
    name = studentname[1]
    print name

split_string(mystring)

3 个答案:

答案 0 :(得分:1)

split_string(mystring)运行第一个函数,生成带有2个字符串的元组。但是没有其他功能可以执行进一步拆分。

尝试:

x, y = split_string(mystring)
x1 = split_scores(x)
y1 = stnames(y)
(x1, y1)
哎呀,你的功能打印结果,不回复它们。所以你还需要:

def split_string(mystring):
    # split mystring on ";"
    strings = mystring.split(";")
    return strings[0],strings[1]

def split_string(mystring):
    # this version raises an error if mystring does not have 2 parts
    x, y = mystring.split(";")
    return x,y

def split_scores(x):
    # return a list with all the scores
    return x.split("=")

def stnames(y):
    # return a list with all names
    return y.split(",")

def lastname(y):
    # return the last name (, delimited string)
    return y.split(",")[-1]

如果要在函数之间拆分任务,最好让它们返回结果而不是打印它们。这样它们可以以各种组合使用。函数中的print仅用于调试目的。

或紧凑的脚本版本:

x, y = mystring.split(';')
x = x.split('=')
y = y.split(',')[-1]
print y, x

如果您想将分数作为数字,请添加:

x = [int(x) for x in x]

处理。

答案 1 :(得分:0)

试试这个:

def split_string(mystring):
    strings = mystring.split(";")
    x = int(strings[0].replace("=",""))
    y = strings[-1].replace(","," ")
    print x,y

答案 2 :(得分:0)

我的两分钱。

如果我理解你想要实现的目标,这段代码可能会有所帮助:

mystring = "5=20=22=10=2=0=0=1=0=1;Vincent Appel,Johannes Mondriaan"

def assignGradesToStudents(grades_and_indexes, students):
    list_length = len(grades_and_indexes)
    if list_length%2 == 0:
        grades = grades_and_indexes[:list_length/2]
        indexes = grades_and_indexes[list_length/2:]
        return zip([students[int(x)] for x in indexes], grades)

grades_and_indexes, students = mystring.split(';')
students = students.split(',')
grades_and_indexes = grades_and_indexes.split('=')

results = assignGradesToStudents(grades_and_indexes, students)
for result in results:
    print "[*] {} got a {}".format(result[0], result[1])

<强>输出:

[*] Vincent Appel got a 5
[*] Vincent Appel got a 20
[*] Johannes Mondriaan got a 22
[*] Vincent Appel got a 10
[*] Johannes Mondriaan got a 2