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_indexname変数に変換されます。names_score

どうすればこれを達成できるか知っている人はいますか?

ありがとう - ハイフレックス

編集

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.lsplitstr.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 に答える