2016-09-13 2 views
0

私は、次の正規表現を持っている:私は次の文字列で、この正規表現を使用する場合正規表現数量子はどのように適用されますか?

res = re.finditer(r'(?:\w+[ \t,]+){0,4}my car',txt,re.IGNORECASE|re.MULTILINE) 
for item in res: 
    print(item.group()) 

「わたしの家は私の車は赤、白の塗装されて 馬は非常に高速疾走しています。道路では、私は車をゆっくりと運転する。

私は以下の結果を得ています:

  • 家は道路
  • 私の車、白く塗られ、私は私の車を運転

私の質問は、その数量詞{0,4}についてですグループ全体に適用する必要があります。グループは、式\w+と[]で区切られた記号を含む単語を収集します。量限定子は\w+で定義された "単語"にのみ適用されますか?結果で私は4つの単語とスペースとコンマを得ています。私には分かりません。

+0

しかし、私は4つ以上のシンボルを取得しています。単語スペースとカンマを数える場合。 – user963386

+2

単語+スペース/カンマの4つのシリーズが表示されています。 – sln

答えて

1

ここでは何が起こっているのですか?あなたは?::1つ以上の "単語"、続いて[\ t、](スペース、タブの文字、​​またはカンマ)を収集する非キャプチャグループを作成するには、先行するものの1つまたは複数と一致します。 {0,4}は、非キャプチャグループの0〜4の間で一致します。それで、 "my car"という言葉を見て、その前の4単語をキャプチャします。そのうち4つは\ w +と\と一致し、スペースは指定したキャラクタセットで食べられます。これが書かれた

として働いている、これは「私の車」の出現の前に0-4の単語/スペース/カンマ/タブが一致するより簡潔

(?: -- Non capturing group 
\w+ Grab all words 
[ \t,]+ -- Grab all spaces, comma, or tab characters 
) -- End capture group 
{0,4} -- Match the previous capture group 0-4 times 
my car -- Based off where you find the words "my car" 

結果

をばらばらに

関連する問題