Python で正規表現を使用して、ピリオドで区切られた頭字語を一致させようとしています。次のコードがあります。
import re
test_string = "U.S.A."
pattern = r'([A-Z]\.)+'
print re.findall(pattern, test_string)
この結果は次のとおりです。
['A.']
なぜこのような結果になったのか不思議です。+ が貪欲であることは知っていますが、[AZ]\ が最初に出現するのはなぜですか。無視?
この正規表現は次のようになります。
U.S.A.
文のようにすべての頭字語をキャプチャします(?:(?<=\.|\s)[A-Z]\.)+
実際の例: http://www.rubular.com/r/9bslFxvfzQ
サンプルテキスト
This is the U.S.A. we have RADAR.
マッチ
U.S.A
(...)
in regex はグループを作成します。次のように変更することをお勧めします。
pattern = r'(?:[A-Z]\.)+'