2016-04-01 7 views
0

は小さな人工的な例でしょうか?Python:いくつかの単語のどれが一致したかを確認するには?右のそれを行うにはどのように</p> <pre><code>s = 'I eat apple' found = re.WHICH_ONE_MATCHED("\b(?:banana|apple|carrot)\b", s) print "You like that "+found </code></pre> <p>:ここ

+0

re.findall( "(バナナ|リンゴ|ニンジン)"、 "I love apples")はトリックを行います。 [documentation](https://docs.python.org/2/library/re.html)を見ても気になりませんでしたか? – Marcus

答えて

0

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

ありがとうございます。空の文字列を使わなくても同じ出力を出力できますか? – Digital

+0

はい、私の答えに示されているように 'filter'を使ってください。 – anubhava

+0

' apple 'などのグループを捕まえるのを避けることができました – rock321987

1
import re 
s = 'I eat apple carrot and banana' 
found = re.findall("\\b(?:banana|apple|carrot)\\b", s) 
print found 

IDEONE DEMO

0

別のアプローチは、カウンタを使用してだろう()。利点は、単語が何回見つかったかを知ることです。

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

これには正規表現は必要ありません。あなたのフルーツをリストに保存してから、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