Вырезание строки из строки и добавление в список [Python] - PullRequest
0 голосов
/ 27 ноября 2018

Итак, у меня есть:

text = 'Hi my name is !bob i like to !eat'  

И я хочу создать список, включающий слова после восклицательных знаков.Итак, я хотел бы функцию, которая создает результат, который выглядит следующим образом:

>>> my_function(text)  
['bob', 'eat']

Пока все, что я мог думать, было:

>>> test_string = text['!':' ']  

, но я не могу использовать строки вместо индексов.Какие-либо предложения?

Примечание. Я бы хотел, чтобы все они были в нижнем регистре с дубликатами.

Ответы [ 4 ]

0 голосов
/ 27 ноября 2018

Если вы уверены, что искомый символ всегда находится непосредственно перед интересующим словом, вы можете просто проверить, есть ли этот символ в списке слов.

text = 'Hi my name is !bob i like to !eat'  
symb = '!'

def my_function(some_text): 
    return [i.replace(symb,'').lower() for i in text.split() if symb in i]

my_function(text)
>>['bob', 'eat']

И если вы это сделаетене хотите использовать символ в результатах, просто замените его на ''.

0 голосов
/ 27 ноября 2018

Я мог бы использовать регулярное выражение:

import re
text = 'Hi my name is !bob i like to !eat'
test_string = re.findall(r'!(\w+)', text)
print(test_string)

результат:

$ python x.py 
['bob', 'eat']
0 голосов
/ 27 ноября 2018

Самое простое решение [которое может показаться не пифоническим;)] Я могу придумать:

words = [x[1:] for x in text.split(" ") if x[0]=='!']

print(words)

Вывод:

['bob', 'eat']
0 голосов
/ 27 ноября 2018

Вы можете split на ! и затем split снова на ' '.Возьмите первую запись из каждого сегмента во втором разделении.

[segment.split()[0] for segment in text.split("!")[1:]]
# ['bob', 'eat']
...