【问题标题】:Regular Expression Matching Stock Ticker正则表达式匹配股票代码
【发布时间】:2017-12-29 15:48:41
【问题描述】:

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

正则表达式错过了很多匹配项。

【问题讨论】:

  • 你能说得更具体点吗?它错过了什么?

标签: python regex python-3.x


【解决方案1】:

如果您注意到,有一种模式会丢失项目。在非标点符号的长部分中最为明显:它错过了所有其他项目。

这是因为re.findall() 找到非重叠 匹配项,并且您的模式匹配每个匹配项之前和之后的空格。也就是说,当一个item匹配后,下一个item的初始空间已经被吞噬,不能再使用了。

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

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

【讨论】:

  • 这是解释 OP 技术实际问题的唯一答案。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2018-03-21
    • 2020-08-06
    • 1970-01-01
    • 2020-01-10
    相关资源
    最近更新 更多