Распечатать несколько вхождений в строке
Я пытаюсь написать функцию, в которой ввод имеет ключевое слово, которое встречается в строке несколько раз, и после ключевого слова будет печатать материал с двойными кавычками. По существу...
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
никогда не появляется внутри строк в двойных кавычках.