web-dev-qa-db-ja.com

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"

しかし、「名前」という単語の後に来るすべての単語と句読点を取得したいと思います。

19
Ryan

正規表現を使用する代わりに、(たとえば)次のように文字列を 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'

ただし、不要な空白は個別に処理する必要があります。

28
Aufwind

あなたの例は機能しませんが、私が考えを理解しているように:

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"

これは、「名前」の後から行末まですべてを印刷します。

11
DominiCane

他の選択肢...

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

"^name: (\w+)"の代わりに:

"^name:(.*)"
3
Petar Ivanov

出力に関して使用したもの:

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

使用する必要があるもの(match all):

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

簡単にできます

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、and am am new python andもっと知りたい

あなたが何をしたいかによって、これは助けになるかもしれません。

1
Hassek
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)
1
krish

これはuでうまくいきます:作業名\ 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
Poovaraghan

正規表現を使用せずに、次のことができます

  • 句読点を削除します(検索語を含むすべてを単一のケースにすることを検討してください)

  • テキストを個々の単語に分割します

  • 検索されたWordのインデックスを検索

  • 配列からWordを取得(index + 1後のWordの場合、index - 1前のWordの場合)

コードスニペット:

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']
0
philshem