Я хочу найти слова, которые появляются после ключевого слова (указанного и найденного мной) и распечатывают результат. Я знаю, что я должен использовать регулярное выражение, чтобы сделать это, и я попробовал это, например:
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"
Но я хочу получить все слова и пунктуации, которые появляются после слова "имя".
Вместо использования регулярных выражений вы можете просто (например) отделить строку с помощью 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'
Однако вам приходится иметь дело с лишними пробелами отдельно.
Ваш пример не будет работать, но, как я понимаю, идея:
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" и до конца строки.
Другая альтернатива...
import re
m = re.search('(?<=name)(.*)', s)
print m.groups()
Что вы использовали для вывода:
re.search("name (\w+)", s)
Что вы должны использовать (сопоставить все):
re.search("name (.*)", s)
Вместо "^name: (\w+)"
используйте:
"^name:(.*)"
Это будет работать для 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'
Вы можете просто сделать
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 и хотел бы узнать больше']
в зависимости от того, что вы хотите сделать, может помочь или нет.
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)
Без использования регулярного выражения вы можете
пунктуация полосы (рассмотрим возможность создания всего одного случая, включая поисковый запрос)
разделите текст на отдельные слова
найти индекс искомого слова
получить слово из массива (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']
mystring.partition(keyword)
без кавычек вокругkeyword