2017-09-07 7 views
4

私は次のコードを書くとき:正しく動作させるために正規表現パターンに余分なスペースが必要なのはなぜですか?

m = re.findall('\sf.*?\s','a f fast and friendly dog'); 

を私は出力取得:[' f ', ' friendly ']

をしかし、私は速いF &の間に余分なスペースを提供するとき、私は私が前のものから期待される次の出力を取得します。

m = re.findall('\sf.*?\s','a f fast and friendly dog'); 

出力は次のよう コードは次のとおりです。

[' f ', ' fast ', ' friendly '] 

私は最初のケースでは、後に出力を取得していない午前、なぜ誰もが(F &速い間の余分なスペースを挿入せずに)教えてもらえますか?

答えて

7

あなたのパターンは\sで終わるので、 正規表現のマッチングは重複しないです。最初の一致は' f 'と一致し、残りの文字列はで始まり、' fast'ではなく末尾のスペースと一致します。 'fast'は、\sで始まるパターンと一致しません。

+0

正規表現はどのようにするべきですか? かっこ抽出を含める必要がありますか? –

+2

末尾のスペースは存在する必要がありますが、消費されない場合は、[lookahead](https://docs.python.org/3/library/re.html?highlight=lookahead)を使用してください。 '/ \ sf。*?(?= \ s)/' –

+2

あなたは '\ bf。*?\ b'の後に何をしているのか推測しています - (図解)(https://regex101.com/r/Hh24xG/1)。 – ClasG

1

このスペースは、一致した後に' f 'で消費されます。次の検索は'fast and friendly dog'から始まります。しかし今はfastに先頭のスペースがなく、一致しません。

スペースを消費しないようにするには、肯定的なlookbehind検索をお試しください。

関連する問題