Распечатать несколько вхождений в строке

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

Input= 'alkfjjiekeyword "someonehelpmepls"fjioee... omgsos someonerandom help helpppmeeeeeee keyword"itonlygivesmeoneinsteadofmultiple"... sadnesssadness!sadness' 

Output= someonehelpmepls 

itonlygivesmeoneinsteadofmultiple 

Если возможно иметь выходные данные в качестве отдельной строки, это было бы лучше.

Вот что у меня так далеко:

def getEm(s): 

    h = s.find('keyword') 

    if h == -1 
       return -1 

    else: 
       begin = s.find('"',h) 
       end = s.find('"', begin+1) 
       result = s[begin +1:end] 
    print (result)

Пожалуйста, не предлагайте импорт. Я не знаю, как это сделать, и не знаю, что это такое, я новичок.

1 ответ

Давайте рассмотрим пример ввода:

>>> Input= 'alkfjjiekeyword "someonehelpmepls"fjioee... omgsos someonerandom help helpppmeeeeeee keyword"itonlygivesmeoneinsteadofmultiple"... sadnesssadness!sadness'

Я считаю, что один " отсутствовал во входных данных для примера, поэтому я добавил его.

Насколько я понимаю, вы хотите получить строки в двойных кавычках, которые следуют за словом keyword, Если это так, то:

def get_quoted_after_keyword(input):
    results = []
    split_by_keyword = input.split('keyword')
    # you said no results before the keyword
    for s in split_by_keyword[1:]:
        split_by_quote = s.split('"')
        if len(split_by_quote) > 1:
            # assuming you want exactly one quoted result per keyword
            results.append(split_by_quote[1])
    return results

>print('\n'.join(get_quoted_after_keyword(Input))
>someonehelpmepls
>itonlygivesmeoneinsteadofmultiple

Как это устроено

Давайте посмотрим на первый кусок:

>>> Input.split('keyword')
['alkfjjie',
 ' "someonehelpmepls"fjioee... omgsos someonerandom help helpppmeeeeeee ',
 '"itonlygivesmeoneinsteadofmultiple"... sadnesssadness!sadness']

Разделив Input на keywordВ этом случае мы получим три строки. Вторая строка до последней - все строки, которые следуют за словом keyword, Чтобы получить эти строки без первой строки, мы используем подписку:

>>> Input.split('keyword')[1:]
[' "someonehelpmepls"fjioee... omgsos someonerandom help helpppmeeeeeee ',
 '"itonlygivesmeoneinsteadofmultiple"... sadnesssadness!sadness']

Теперь наша следующая задача - получить часть этих строк в двойных кавычках. Для этого мы разбиваем каждую из этих строк на ", Вторая строка, пронумерованная 1, будет строка в двойных кавычках. В качестве более простого примера, давайте возьмем эти строки:

>>> [s.split('"')[1] for s in ('"one"otherstuff', ' "two"morestuff')]
['one', 'two']

Далее мы соединяем эти два шага:

>>> [s.split('"')[1] for s in Input.split('keyword')[1:]]
['someonehelpmepls', 'itonlygivesmeoneinsteadofmultiple']

Теперь у нас есть строки, которые мы хотим. Последний шаг - хорошо их распечатать, по одному на строку:

>>> print('\n'.join(s.split('"')[1] for s in Input.split('keyword')[1:]))
someonehelpmepls
itonlygivesmeoneinsteadofmultiple

Ограничение: этот подход предполагает, что keyword никогда не появляется внутри строк в двойных кавычках.

Другие вопросы по тегам