2017-10-02 3 views
-1

私はグループに不本意な量指定子を使用しようとしていますが、期待通りに動作しません。しかし、同じ正規表現は、https://regexr.com/のようなオンラインの正規表現ツールで完璧に動作します。Python regex:キャプチャグループでの不本意な数値化器

re.findall(r"(ab)?c", "c")  # this returns [''], when I expect ['c'] 
re.findall(r"(ab)?c", "abc") # this returns ['ab'], when I expect ['abc'] 

正規表現r "(ab)?c"が 'c'または 'abc'と一致すると予想します。

私はここで何が欠けていますか? re.findallのドキュメントから

+0

あなたは完全にマッチするのではなく、キャプチャグループを探していますか? [regex101](https://regex101.com)にあなたのものを投稿し、コードを生成してコードに貼り付けてください。正しい結果が得られるはずです。 – ctwheels

答えて

1

一つ以上の捕捉基がパターン内に存在する場合、グループのリストを返します。

パターンにグループがある場合は、そのグループが返されます。最初の例では、一致するグループが見つからないため何も返されず、2番目の例ではグループのみが返されます。

>>> re.search(r"(ab)?c", "c") 
<_sre.SRE_Match object; span=(0, 1), match='c'> 

>>> re.search(r"(ab)?c", "abc") 
<_sre.SRE_Match object; span=(0, 3), match='abc'> 

あなたは、文字列でsearchしたくない場合は、コール

の結果に.groups()を呼び出すことにより、グループを取得することができます:re.searchhttps://docs.python.org/3/library/re.html#re.regex.searchで達成することができます何が求め

その文字列がパターンと一致するかどうかを確認してください(グループを参照する可能性があります)。re.matchを使用してください(その違いについては、search vs matchを参照してください)。

+0

ありがとうございます。これは、グループがパターンに存在するときの行動を理解するのに役立ちました。 – whitehat

関連する問題