给定字符串索引如何恢复相应的单词/令牌?

时间:2018-12-21 12:33:09

标签: python python-3.x string list-comprehension

假设我们从1开始计数,我在索引中返回字符串的位置,例如:

给出:

.pad12 {
  padding: 0 12px;
  overflow-x: auto
}

和索引s = 'hi how are you' ,我想返回完整的令牌,在这种情况下,它应该是i = 4how,我想返回i=7are我想返回i = 11,如果返回you,则返回空格i = 3。知道如何在字符串中给定位置的情况下获取完整令牌吗?

3 个答案:

答案 0 :(得分:3)

创建一个函数,检查s[i]是否为空格,然后返回空格。否则,将字符串从开头拆分为ii,最后用空格和concat结束,并返回两个拆分的最后一个元素和第一个元素。像这样:

def getToken(str, i):
    if str[i] == ' ':  # if whitespace, return white space
        return str[i]
    return str[:i].split(' ')[-1]+str[i:].split(' ')[0] # else return the word

结果:

>>> getToken(s, 0)
'hi'
>>> getToken(s, 1)
'hi'
>>> getToken(s, 2)
' '
>>> getToken(s, 3)
'how'
>>> getToken(s, 11)
'you'
>>> getToken(s, 10)
' '

索引从0开始,如果您希望索引从1开始,只需将yourindex-1传递给函数。

答案 1 :(得分:2)

我不确定4how的对应关系。但是我想index是字符串中第一个字母的从零开始的索引。那么您的算法就相当简单:

s = 'hi how are you'

index = 0
print(s[index:].split()[0])  # prints 'hi'

index = 3
print(s[index:].split()[0])  # prints 'how'

index = 7
print(s[index:].split()[0])  # prints 'are'

答案 2 :(得分:2)

您应该使用返回第一个单词的正则表达式。您可以使用类似这样的内容:

def find_token(index, string):
    return re.findall('\w+', string[index - 1:])[0]

这将找到一个或多个\w characters并返回第一个单词。无论单词之间的分隔符是什么,这都将起作用。