2

我在按列出的顺序、姓名和考试成绩拆分姓名时遇到问题。

我在我的代码中执行了以下操作:print repr(names)在循环中获取以下 6 行数据

'1 Name 559/1 '
'2 Name 484/1 '
'3 Name N'ame 444/2 '
'4 Name 400/1 '
'5 Name Name 928/5 '
'6 Name Name-Name 1292/10 '

我希望能够将它们分开,但我收到一条错误消息AttributeError: 'str' object has no attribute 'lsplit'

我已经尝试过使用 lsplit、rsplit 和 split,但我无法让它工作......

最终结果名称将变成 3 个变量names_indexnamenames_score

有谁知道我怎么能做到这一点?

谢谢-Hyflex

编辑

for item in listitems:
    if item.find("strong"):
        names = str(item.text)
        names = items .split("\n")
        for name in names:
            clean_name = name.lstrip(" ")
            print repr(clean_name)
            student_number = clean_name.lsplit(" ", 1)
            student_score = clean_name.rsplit(" ", 1)
            #student_name = clean_name.lsplit(" ", 1) # Unsure how to get the last part..
4

4 回答 4

6

没有str.lsplit,因为str.split已经从左边走了。

对于每个字符串,只需调用.split(),您将获得一个列表[names_index, name, names_score]

如果模式是number / words / more numbers,那么您可以使用正则表达式:

>>> import re
>>> filter(None, re.split(r'(\d+) (\w.*) (\d.*)', '1 Name 559/1 '))
['1', 'Name', '559/1 ']
>>> filter(None, re.split(r'(\d+) (\w.*) (\d.*)', '6 Name Name-Name 1292/10 '))
['6', 'Name Name-Name', '1292/10 ']
于 2013-09-26T01:38:34.970 回答
3

rsplit 返回拆分后的结果,而不仅仅是最后一部分。所以你实际上是在朝着正确的方向前进。

对于您的名称中可能有空格的代码,您可以执行以下操作:

the_string = the_string.strip()
[id, name_score] = the_string.split(' ',1) # Split into ['1', 'name name 654/1']
[name, score] = name_score.rsplit(' ',1)   # Split into ['name name','654/1']

因此,对于输入“6 Name Name-Name 1292/10”,您的预期值已经存在:

id # this is '6'
name # this is 'Name Name-name'
score # this is '1292/10'
于 2013-09-26T01:39:26.127 回答
3

它就像 -

>>> s = '4 Name 400/1 '
>>> names_index, name, names_score = s.split()
>>> names_index, name, names_score
('4', 'Name', '400/1')
>>> 

正如 Haidro 所说,没有 lsplit 的功能,而是使用 split。

于 2013-09-26T01:43:51.263 回答
3

你可以用你的列表这样操作

>>> names = ['1 Name 559/1 ',
'2 Name 484/1 ',
'3 Name Naaame 444/2 ',
'4 Name 400/1 ',
'5 Name Name 928/5 ',
'6 Name Name-Name 1292/10 ']
>>> names_lst=[]
>>> for n in names:
    names_lst+=n.split()

>>> names_lst
['1', 'Name', '559/1', '2', 'Name', '484/1', '3', 'Name', 'Naaame', 
 '444/2', '4', 'Name', '400/1', '5', 'Name', 'Name', '928/5', '6', 'Name', 
 'Name-Name', '1292/10', ['1', 'Name', '559/1'], ['2', 'Name', '484/1'], 
 ['3', 'Name', 'Naaame', '444/2'], ['4', 'Name', '400/1'],
 ['5', 'Name', 'Name', '928/5'], ['6', 'Name', 'Name-Name', '1292/10']]
于 2013-09-26T01:44:12.697 回答