IndexError:字符串索引超出范围:再一次

时间:2016-10-23 15:50:59

标签: python

我有下一个问题。代码非常适合捕捉标签,但是...我怎样才能把第二个“同时”放入车道完成?

如果我把这条道:

hash = '#hhhh #asdasd' 

代码不会编译。我怎么能改变一下呢?预先感谢。 例外:

while hash[indexA + 1] not in {' ', '#'}:
IndexError: string index out of range

以下是代码:

hash = '#hhhh #asdasd '
indexA = 0
copy = ''
indexB = indexA

while indexA < len(hash):
    indexB = indexA
    copy = ''

    if hash[indexA] == '#' and indexA + 1 < len(hash):
        while hash[indexA + 1] not in {' ', '#'}:
            indexA += 1
            copy = hash[indexB:indexA + 1]

        if len(copy) > 1:
            print('newHashtag: ' + copy)

        if hash[indexA + 1] == ' ':
            indexA += 1

    else:
        indexA += 1

2 个答案:

答案 0 :(得分:2)

如果你想在字符串中找到标签,你可以更容易地使用pythonic方式:

some_string = "#tag1 #tag2 something else #tag3"
tags = [tag.strip("#") for tag in some_string.split() if tag.startswith("#")]

>>> print tags
['tag1', 'tag2', 'tag3']

如果标签没有空格,您可以写下这样的内容:

some_string = "#tag1 #tag2 something else #tag3 #moretags#andmore"
tags = []
for tag in some_string.split():
    if '#' in tag:
        multi_tags = tag.split('#')
        tags.extend([t for t in multi_tags if t])

>>> tags
['tag1', 'tag2', 'tag3', 'moretags', 'andmore']

答案 1 :(得分:1)

您遇到索引问题,因为您没有检查哈希的长度。这应该有效:

hash = '#hhhh #asdasd'
indexA = 0
copy = ''
indexB = indexA

while indexA < len(hash):
    indexB = indexA
    copy = ''

    if hash[indexA] == '#' and indexA + 1 < len(hash):
        while indexA + 1 < len(hash) and hash[indexA + 1] not in {' ', '#'}:
            indexA += 1
            copy = hash[indexB:indexA + 1]

        if len(copy) > 1:
            print('newHashtag: ' + copy)

        if indexA + 1 < len(hash) and hash[indexA + 1] == ' ':
            indexA += 1

    else:
        indexA += 1