2017-12-29 41 views
4

株価指数を文字列に一致させるのに問題があります。私は正規表現をスペース、3大文字、そして最後にスペース、ピリオド、または疑問符にマッチさせたい。正規表現マッチング株式ティッカー

以下は、作成したサンプルパターンです。

> `example = 'These are the tickers that I am trying to find: FAB. APL APL? GJA ADJ AKE EBY ZKE SPR TYL' 

re.findall('[ ][A-Z]{3}[ .!?]',example)` 

正規表現は大部分の一致を失います。

+1

は、あなたがより具体的にすることはできますか?何が欠けていますか? – glibdud

答えて

-1

私はあなたが気付いた場合、アイテムが失われるためのパターンがあります(あなたが含めている「!」あなたの質問にではなく、あなたの正規表現で)

6

\s[A-Z]{3}[\s\.\?]使用します。句読点以外の記号の長い部分で最も明白です。他のすべての項目が欠けています。

re.findall()と重複していません。が一致し、一致するパターンが一致する前後のスペースの両方に一致しているためです。つまり、1つのアイテムがマッチした後、次のアイテムの最初のスペースがすでに拾われてしまい、再び使用することはできません。

使用ワード境界(\b)の代わりに、末尾のスペースを/有数のマッチング、そしてあなたの文字クラスはオプションます

>>> re.findall(r'\b[A-Z]{3}\b[.!?]?',example) 
['FAB.', 'APL', 'APL?', 'GJA', 'ADJ', 'AKE', 'EBY', 'ZKE', 'SPR', 'TYL'] 
+1

OPの技術に実際に何が間違っているかを説明する唯一の答えです。 –