あなたは '猫' で始まる任意の単語を一致させたいような音:
import re
l=[u'i like cats and dogs',u'i like catnip plant', u'i like cars']
for s in l:
if "cat" in s:
print re.search("cat\w*",s).group()
はこれが返されます:
あなたが使用することもでき
cats
catnip
を:
print re.search("cat[^\s]*",s).group()
または
print re.search("cat\S*",s).group()
詳細:
あなたの正規表現でこれらの問題があります:"(cat).*[^\s]+"
。最初は括弧内の唯一の部分文字列であるため "cat"のみをグループ化しているため、.groups()
を使用して一致するグループを印刷するときには "cat"しか印刷されません。 2番目は.*
で、(cat)
に続き、スペースを含めてゼロ以上の任意の文字にマッチするので、正規表現は文字列全体とマッチしてから、 "スペースではない"文字一致、[^\s]
になります。
もう1つの問題は、.groups()
を使用して、一致するすべてのグループを含むタプルを返すことです。あなたの場合、1つのグループしか持たないので、1つのグループしか持たないタプルを返します。例えば:
l=[u'i like cats and dogs',u'i like catnip plant', u'i like cars']
for s in l:
if "cat" in s:
print re.search("(cat\w*)",s).groups()
は、(一つだけのグループでそれぞれ)これらのタプルを返します。
(u'cats',)
(u'catnip',)
あなただけのタプルを必要としない一つのグループを持っているので、あなたは.group()
を使用することができますので:
を
print re.search("(cat\w*)",s).group()
それだけでマッチしたグループ返すようにするために:
cats
catnip
を
さらに、グループは完全一致であるため、グループ化する必要はありません(つまり、かっこは必要ありません)。マッチ全体を返す.group(0)
へ.group()
デフォルト:あなたが欲しいものを
print re.search("cat\w*",s).group()
プリント。
は最後に、それはまた、単語cat
に一致するように*
が\w
、[^\s]
、および\S
後に使用されることに注意してください。