2017-05-24 87 views
0

我寫一個Groovy腳本的Jenkinsfile做下面的一對和存儲:Groovy:在正則表達式來過濾掉「鍵:值」在數組

第1步:讀取輸入文件info_file.txt。信息文件的內容包括以下:

sh> cat info_file.txt 
CHIP_DETAILS:1234-A0;1456-B1;2456-B0;3436-D0;4467-C0 

步驟2:存儲在數組中的CHIP_DETAILS去除後綴-A0,-B1等後..

例如:

Integer[] testArray = ["1234", "1456", "2456" , "3436" , "4467"] 

步驟3 :按順序打印陣列的元素。例如:

testArray.each { 
println "chip num is ${it}" 
} 

我已經寫了小的代碼以測試是否CHIP_DETAILS「鍵」是存在於輸入文件和其工作正常。 但是我發現很難編寫正則表達式來刪除後綴(-A0,-B1等..)並將相應的值存儲在數組中。 代碼如下:

stage('Read_Params') 
     { 
      steps 
      { 
       script 
       { 
        println ("Let's validate and see whether the "Key:Value" is present in the info_file.txt\n"); 
        if (new File("$JobPath/Inputparams.txt").text?.contains("CHIPS_DETAILS")) 
        { 
         println ("INFO: "Key:Value" is present in the info_file.txt \n"); 
         >>>>> proceed with Step-1, Step-2 and Step-3... <<<<< 
        } 
        else 
        { 
         println ("WARN: "Key:Value" is NOT present in the info_file.txt \n"); 
         exit 0; 
        } 
       } 
      } 
     } 

在此先感謝您的幫助!

回答

1

你可以嘗試像以下:

def chipDetails = 'CHIP_DETAILS:1234-A0;1456-B1;2456-B0;3436-D0;4467-C0' 

def testArray = (chipDetails =~ /(?<=^|[:;])\d*(?=[-])/)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 
assert​ '1234' == testArray[0] 
assert '1456' == testArray[1] 
assert '2456' == testArray[2] 
assert '3436' == testArray[3] 
assert '4467' == testArray[4]​ 

正則表達式確保你想捕捉的數量或者是在一行的開頭或前綴:或;後綴爲 -

定界符之間可以有任意數量的數字。

遍歷結果類似:

testArray.each{ 
    println it 
}​ 
+0

感謝@Mike,此正則表達式聽起來不錯。有沒有一種方法可以直接將'values'寫入數組,而不是使用'assert'逐個寫入。原因是''CHIP_DETAILS'中的條目數量在我的情況下是動態的,因爲它在用戶觸發流水線時提供了一個輸入參數。我的意思是有時我們可能只有一個條目說'1234-A0',或者我們可能有超過10個條目,這取決於用戶的輸入。 – Yash

+0

@Yash assert只是爲了告訴你結果如預期的那樣,它們不是解決方案所需要的,所有需要的是正則表達式和賦值給testArray,我已經更新了問題以展示如何遍歷數組 –

+0

謝謝@Mike! – Yash