如何在python中将字符串拆分为多个部分?

如何在python中将字符串拆分为多个部分?,python,string,python-2.7,split,Python,String,Python 2.7,Split,我很难按照名字的顺序、名字和考试成绩来划分我的名字 我在代码中执行了以下操作:在循环中打印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'对象没有属性'lsplit' 我尝试过使用ls

我很难按照名字的顺序、名字和考试成绩来划分我的名字

我在代码中执行了以下操作:
在循环中打印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'对象没有属性'lsplit'

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

最终结果名称将转换为3个变量:
names\u index
name
names\u 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..

没有
str.lsplit
,因为
str.split
已经从左侧开始

对于每个字符串,只需调用
.split()
,您将得到一个包含
[名称\索引、名称、名称\分数]

如果模式为
number/words/more number
,则可以使用正则表达式:

>>> 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 ']

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 1292/10',您的预期值已经存在:

id # this is '6'
name # this is 'Name Name-name'
score # this is '1292/10'
这很容易-

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

正如Haidro所说,没有lsplit函数,请改用split。

您可以通过列表以这种方式进行操作

>>> 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()
给予


问题是有时我的名字中有空格和/或符号。@Hyflex名字中可能有数字吗?@Hyflex
(\d+)
匹配一个数字(
+
代表多个数字),
(\w.*)
匹配名字。我们使用
*
而不是
+
,这样我们就可以得到空格。最后,
(\d.*)
获取最后一个digits@Hyflex啊,这只是去除了由
re.split()
@Hyflex文档返回的列表中的空字符串,我很确定这不是问题所在是的,这将获得您想要的部分,对吗?id、姓名和分数。是的,这也有效。我选择了@Haidro的regex版本,但你的也很好:)问题是名称应该合并而不是拆分。编辑以显示我尝试的示例。
>>> 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']]