Учитывая индекс строки, как восстановить соответствующее слово / токен? - PullRequest
0 голосов
/ 21 декабря 2018

Предполагая, что мы начинаем считать с 1, я возвращаю в индексе позицию строки, например:

Учитывая:

s = 'hi how are you'

и индекс i = 4 Я быхотел бы вернуть полный токен, в этом случае это будет how или с i=7 Я хотел бы вернуть are или с i = 11 Я хотел бы вернуть you, если i = 3, то вернутьпространство .Есть идеи, как получить полный токен с заданной позицией в строке?

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Вы должны использовать регулярное выражение, которое возвращает первое слово.Вы можете использовать что-то вроде:

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

Это найдет 1 или более \w символов и вернет первое слово.Это будет работать независимо от того, какой разделитель между словами.

0 голосов
/ 21 декабря 2018

Создайте функцию, проверьте, является ли s[i] пробелом, затем верните пробел.Иначе разделить строку от начала до i и i до конца пробелами и конкатами и вернуть последний и первый элементы обоих разбиений.Например:

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 в функцию.

0 голосов
/ 21 декабря 2018

Я не уверен, как 4 соответствует how.Но я думаю, 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'
...