正则表达式模式以匹配股票代码

时间:2020-09-13 18:37:07

标签: python regex

我正在尝试匹配具有以下格式的股票代码:

第1部分::市场标识符代码(MIC),用于指定交易证券的交易所。该代码是唯一的,包括四个字符,并以X开头,后跟一个三位数的代码来表示市场,例如用于纳斯达克市场的XNAS。

第1部分与第2部分之间用冒号隔开。

第2部分:股票代码包含两部分: (a)安全代码,通常为1个字符(对于福特来说为F)到5个字符(对于Vanguard 500 Index为VFIAX)。钍 (b)可选部分,可以进一步细分为 (i)到期日期,格式为yymmdd的6位数字 (ii)看跌期权或看涨期权的期权类型,P或C (iii)行使价,即价格x 1000,前面填充有0到8位数字

我需要处理的一个棘手问题是,当存在可选部分时(有时),安全代码将被填充为6个字符的空格。

所以我需要匹配以下有效的行情收录器:

XLON:SBRY
XNAS:TSLA
XCME:SPX   141122P00019500
XNAS:AAPL200918C00032500

我的regexfu不好,这是我到目前为止设法做到的:

^(X)(A-Z){3}(:)(\d|[A-Z]){1,6}\s

与上述所有有效股票代码符号相匹配并与部分正确匹配的正确正则表达式是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用以下方式获取比赛内容:

^X[A-Z]{3}:[A-Z]{1,5}(?:\s*\d{6}[PC]\d{8})?$

Regex demo

月份/日期的精确度更高一些,并且安全代码用空格填充到6个字符可以是:

^X[A-Z]{3}:[A-Z]{1,5}(?: {0,6}\d{2}(?:0[1-9]|1[012])(?:0[1-9]|[12][0-9]|3[01])[PC]\d{8})?$

说明

  • ^字符串的开头
  • X[A-Z]{3}:匹配X,3个字符A-Z和:
  • [A-Z]{1,5}进行1-5次A-Z比赛
  • (?:非捕获组
    • {0,6}\d{2}匹配0-6个空格和2个数字
    • (?:0[1-9]|1[012])匹配一个月的部分01-12
    • (?:0[1-9]|[12][0-9]|3[01])匹配第1天至第31天
    • [PC]\d{8}匹配PC和8位数字
  • )?关闭组并将其设置为可选
  • $字符串结尾

Regex demo