正则表达式匹配股票代码

时间:2017-12-29 15:48:42

标签: python regex python-3.x

我在一串文字中匹配股票代码时遇到了麻烦。我想要一个正则表达式来匹配空格,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)`

正则表达式错过了很多比赛。

2 个答案:

答案 0 :(得分:6)

如果你注意到,那里有一个错过项目的模式。它在很长的非标点符号中最为明显:它错过了其他所有项目。

这是因为re.findall()找到非重叠匹配,并且您的模式匹配每个匹配前后的空格。这意味着在匹配一个项目后,下一个项目的初始空间已被吞噬,无法再次使用。

使用单词边界(\b)而不是匹配前导/尾随空格,并使您的角色类可选:

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

答案 1 :(得分:-1)

我会使用\s[A-Z]{3}[\s\.\?](你在问题中包括“!”而不是你的正则表达式)