Поиск слов после ключевого слова в python
Я хочу найти слова, которые появляются после ключевого слова (указанного и найденного мной) и распечатывают результат. Я знаю, что я должен использовать регулярное выражение, чтобы сделать это, и я попробовал это, например:
import re
s = "hi my name is ryan, and i am new to python and would like to learn more"
m = re.search("^name: (\w+)", s)
print m.groups()
Вывод:
"is"
Но я хочу получить все слова и пунктуации, которые появляются после слова "имя".
Ответы
Ответ 1
Вместо использования регулярных выражений вы можете просто (например) разделить вашу строку с помощью str.partition(separator)
следующим образом:
mystring = "hi my name is ryan, and i am new to python and would like to learn more"
keyword = 'name'
before_keyword, keyword, after_keyword = mystring.partition(keyword)
>>> before_keyword
'hi my '
>>> keyword
'name'
>>> after_keyword
' is ryan, and i am new to python and would like to learn more'
Вы должны иметь дело с ненужными пробелами отдельно, однако.
Ответ 2
Ваш пример не будет работать, но, как я понимаю, идея:
regexp = re.compile("name(.*)$")
print regexp.search(s).group(1)
# prints " is ryan, and i am new to python and would like to learn more"
Это будет печатать все после "name" и до конца строки.
Ответ 3
Другая альтернатива...
import re
m = re.search('(?<=name)(.*)', s)
print m.groups()
Ответ 4
Вместо "^name: (\w+)"
используйте:
"^name:(.*)"
Ответ 5
Что вы использовали для вывода:
re.search("name (\w+)", s)
Что вы должны использовать (сопоставить все):
re.search("name (.*)", s)
Ответ 6
Вы можете просто сделать
s = "hi my name is ryan, and i am new to python and would like to learn more"
s.split('name')
Это разделит вашу строку и вернет список, подобный этому ['hi my', 'is ryan, и я новичок в python и хотел бы узнать больше']
в зависимости от того, что вы хотите сделать, может помочь или нет.
Ответ 7
Это будет работать для u: work name\s\w +\s (\ w +)
>>> s = 'hi my name is ryan, and i am new to python and would like to learn more'
>>> m = re.search('name\s\w+\s(\w+)',s)
>>> m.group(0)
'name is ryan'
>>>> m.group(1)
'ryan'
Ответ 8
import re
s = "hi my name is ryan, and i am new to python and would like to learn more"
m = re.search("^name: (\w+)", s)
print m.group(1)
Ответ 9
Без использования регулярного выражения вы можете
-
пунктуация полосы (рассмотрим возможность создания всего одного случая, включая поисковый запрос)
-
разделите текст на отдельные слова
-
найти индекс искомого слова
-
получить слово из массива (index + 1
для слова после, index - 1
для слова раньше)
Фрагмент кода:
import string
s = 'hi my name is ryan, and i am new to python and would like to learn more'
t = 'name'
i = s.translate(string.maketrans("",""), string.punctuation).split().index(t)
print s.split()[i+1]
>> is
Для множественных входов вам нужно сохранить несколько индексов:
import string
s = 'hi my NAME is ryan, and i am new to NAME python and would like to learn more'
t = 'NAME'
il = [i for i, x in enumerate(s.translate(string.maketrans("",""), string.punctuation).split()) if x == t]
print [s.split()[x+1] for x in il]
>> ['is', 'python']