答えて
regexで検索語にキャプチャグループを使用し、findall
を呼び出した後の結果でキャプチャされたグループを調べることができます。これらの例を参照してください。
>>> s = 'I eat apple'
>>> arr = re.findall(r"\b(?:(banana)|(apple)|(carrot))\b", s)
[('', 'apple', '')]
>>> for v in arr:
... print filter(None, v)[0]
...
apple
>>> s = 'I eat apple and carrot'
>>> arr = re.findall(r"\b(?:(banana)|(apple)|(carrot))\b", s)
>>> for v in arr:
... print filter(None, v)[0]
...
apple
carrot
ありがとうございます。空の文字列を使わなくても同じ出力を出力できますか? – Digital
はい、私の答えに示されているように 'filter'を使ってください。 – anubhava
' apple 'などのグループを捕まえるのを避けることができました – rock321987
import re
s = 'I eat apple carrot and banana'
found = re.findall("\\b(?:banana|apple|carrot)\\b", s)
print found
別のアプローチは、カウンタを使用してだろう()。利点は、単語が何回見つかったかを知ることです。
from collections import Counter
s = 'I eat apple'
to_find = ['banana','apple','carrot']
found = Counter()
for word in s.split(' '):
if word in to_find:
found.update({word})
print(found)
>>> Counter({'apple': 1})
これには正規表現は必要ありません。あなたのフルーツをリストに保存してから、forループを使って一致を見つけることができます。
>>> s = 'I eat apple'
>>> fruits = ['banana', 'apple', 'carrot']
>>> found = [fruit for fruit in fruits if fruit in s][0]
>>> print "You like that %s" %found
You like that apple
re.findall( "(バナナ|リンゴ|ニンジン)"、 "I love apples")はトリックを行います。 [documentation](https://docs.python.org/2/library/re.html)を見ても気になりませんでしたか? – Marcus