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

2024-06-25 23:44:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

第2部分:由两部分组成的股票代码: (a) 安全代码通常为1个字符(福特为F)到5个字符(Vanguard 500索引为VFIAX)之间的任意值。Th (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

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


Tags: 代码市场格式价格数字字符股票代码vanguard
1条回答
网友
1楼 · 发布于 2024-06-25 23:44:56

您可以使用以下方法获取匹配项:

^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])匹配一天第01-31部分
    • [PC]\d{8}匹配PC和8位数字
  • )?关闭组并将其设置为可选
  • $字符串的结尾

Regex demo

相关问题 更多 >