最近遇到一難題,對一段 程式進行決議,程式中會包含一些資料的維度計算,所以會有+-*/的符號,也會有iif運算式和>0,=0,>1,=1的判斷字符,需求是:獲取每個 [Measures].后的資料資訊,[Measures].后的第一個中括號括起來的內容是指標,后邊的部分是維度,維度可能會有多個,用逗號分隔,最終是決議取到所有的指標和維度,
比如:
([Measures].[例子],[KKK].[K Key].&[一串長長的字符])
那么:
[例子]是指標
[KKK].[K Key].&[一串長長的字符]是維度
需要將iif,IIF,+-*/,>0,=0,>1,=1,甚至<0,<1這樣的字符去除,以及空格字符也需要去除,這些字符大部分都是在中括號之外,但中括號之內有時候也會存在,所以中括號之內的元素資訊應保持不變,僅僅將[]之外的以上特殊字符去除。
比如 :
iif(([Measures].[這是一個例子(是全角的闊號)]+[Measures].[這是第二個例子(是半角的闊號+1+2+3)]),[第三個例子].[吃飯].&[1],NULL)
經過正則處理后,需要呈現為:
[Measures].[這是一個例子(是全角的闊號)][Measures].[這是第二個例子(是半角的闊號+1+2+3)],[第三個例子].[吃飯].&[1],NULL
這些資料是有規律可循的,可總結為:中括號之外的特殊字符需要去掉,但逗號作為運算式的承接部分,需要保留。
為了方便理解,我多舉幾個例子,紅色部分是需要用正則替換掉的。
示例一:
iif( [Measures].[P4P-Obs-03_2_24-33舉個例子(test)]=0,NULL, [Measures].[P4P-Obs-03_1_舉個粒子]/ [Measures].[P4P-Obs-03_2_24-33舉例子])
結果:[Measures].[P4P-Obs-03_2_24-33舉個例子(test)],NULL, [Measures].[P4P-Obs-03_1_舉個粒子][Measures].[P4P-Obs-03_2_24-33舉例子]
示例二:
([Measures].[META_例子],[冰糖葫蘆].[好吃的冰糖葫蘆].&[Obs-10_E1])
結果:[Measures].[META_例子],[冰糖葫蘆].[好吃的冰糖葫蘆].&[Obs-10_E1]
示例三(比較多,我把指標和維度,用不同顏色區分,指標是粉色,維度是紫色):
([Measures].[META_例子例子], [天空].[是否清澈].& [0]) - ([Measures].[META_大地大地], [大地].[是否遼闊].& [0]) - (
(
[Measures].[META_例子例子],
[ok].[是否例子].& [0],
[one].[例子例子].& [BRKJ]
) * (
[Measures].[META_例子例子],
[吃飯].[例子例子ok].& [0],
[睡大覺].[例子例子碼].& [BFD],
[吃飯].[例子例子].& [QQ02]
) + (
[Measures].[META_例子例子],
[CHI].[例子例子].& [0],
[HE].[例子例子].& [BR],
[PEN].[HELLO].& [BN03]
)
)
示例四:
iif ( [Measures].[AT0_舉個栗子]=1,NULL, [Measures].[rr0_計算結果]/ [Measures].[都_才好] )
正則學習真的是難啊!研究很久,只能寫一些簡單的,復雜的實在是搞不定啊搞不定!求大俠們幫忙,十分感謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/240701.html
標籤:C#
