Поиск слов после ключевого слова в питоне

16

Я хочу найти слова, которые появляются после ключевого слова (указанного и найденного мной) и распечатывают результат. Я знаю, что я должен использовать регулярное выражение, чтобы сделать это, и я попробовал это, например:

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"

Но я хочу получить все слова и пунктуации, которые появляются после слова "имя".

Теги:
matching
keyword

9 ответов

25

Вместо использования регулярных выражений вы можете просто (например) отделить строку с помощью str.partition(separator) следующим образом:

mystring =  "hi my name is ryan, and i am new to python and would like to learn more"
keyword = 'name'
befor_keyowrd, 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'

Однако вам приходится иметь дело с лишними пробелами отдельно.

  • 0
    Что если в одном предложении несколько имен? Ваше решение не будет работать тогда
  • 0
    Это должно быть mystring.partition(keyword) без кавычек вокруг keyword
Показать ещё 1 комментарий
6

Ваш пример не будет работать, но, как я понимаю, идея:

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" и до конца строки.

  • 0
    Большое спасибо!
2

Другая альтернатива...

   import re
   m = re.search('(?<=name)(.*)', s)
   print m.groups()
2

Что вы использовали для вывода:

re.search("name (\w+)", s)

Что вы должны использовать (сопоставить все):

re.search("name (.*)", s)
2

Вместо "^name: (\w+)" используйте:

"^name:(.*)"
1

Это будет работать для 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'
1

Вы можете просто сделать

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 и хотел бы узнать больше']

в зависимости от того, что вы хотите сделать, может помочь или нет.

0
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)
0

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

  • пунктуация полосы (рассмотрим возможность создания всего одного случая, включая поисковый запрос)

  • разделите текст на отдельные слова

  • найти индекс искомого слова

  • получить слово из массива (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']

Ещё вопросы

Сообщество Overcoder
Наверх
Меню