2017-06-07 22 views
4

的OCC選項符號由4個部分組成:標的股票或ETF的如何使用正則表達式來解析OCC選項符號?

  1. 根符號,填充空格以6個字符
  2. 失效日期,6位數字格式YYMMDD
  3. 選項類型, P或C,對於賣出或買入期權
  4. 行使價,作爲價格×1000,前面用0填充至8位數字

作爲示例SPX 141122P00019500裝置a put on SPX, expiring on 11/22/2014, with a strike price of $19.50.

是否可以使用正則表達式自動解析出來?我使用JavaScript

+0

什麼是預期的結果? – guest271314

+0

解析字符串到不同的部分 – Shamoon

回答

2

這裏是正則表達式(我強烈建議http://regexr.com

([\w ]{6})((\d{2})(\d{2})(\d{2}))([PC])(\d{8}) 

組別1:ETF

組2:年

組3:月

組4:天

第5組:放入/呼叫

Group6:罷工價格

您的js看起來像這樣(有些僞代碼。未經測試)

var myString = "SPX 141122P00019500"; 
var myRegexp = /([\w ]{6})((\d{2})(\d{2})(\d{2}))([PC])(\d{8})/g; 
var match = myRegexp.exec(myString); 

console.log("a " + match[5] + " on " + match[1].trim() + ", expiring on " + match[3] + "/" + match[4] + "/20" + match[2] + " with a strike price of $" + match[6]); 
+0

'RegExp'處理ticker包括數字嗎? – guest271314

+0

@ guest271314你是對的,現在編輯 –

1

我不認爲你甚至需要一個正則表達式,假設OCC選項字符串具有固定格式。相反,您可以嘗試使用substring()來提取各種組件。

var occ = 'SPX 141122P00019500'; 
 
var symbol = occ.substring(0, 3); 
 
var year = parseInt(occ.substring(6, 8)) + 2000; 
 
var month = occ.substring(8, 10); 
 
var day = occ.substring(10, 12); 
 
var date = month + '/' + day + '/' + year; 
 
var type = occ.substring(12, 13) == 'P' ? 'put' : 'call'; 
 
var price = parseFloat(occ.substring(13, 21))/1000.0; 
 

 
var output = 'a ' + type + ' on ' + symbol + ', expiring on ' + date + 
 
      ', with a strike price of $' + price.toFixed(2); + '.'; 
 
console.log(output);

我希望用串來構建輸出字符串一般會進行比使用正則表達式更好。

1

您可以使用RegExp/^[^\s]+(?=\s+|\d{6})|\d{6}(?=C|P)|(C|P)(?=0+)|(?!:\1)0+|\d+$/g以匹配字符串的開頭是不是空格字符,或日期爲下六個數位之後CP,或CP後跟一個或多個0字符,或一個或多個字符0個字符前面有CP或字符串末尾的一個或多個數字。

利用析構賦值來定義數組中各個變量的匹配部分。

let quote = "SPX 141122P00019500"; 
 
    
 
let re = /^[^\s]+(?=\s+|\d{6})|\d{6}(?=C|P)|(C|P)(?=0+)|(?!:\1)0+|\d+$/g; 
 

 
let [ticker, date, option, strike, price] = quote.match(re); 
 

 
console.log({ticker, date, option, strike, price});