你好,我有一個正規表示式,可以從 Month_year 中提取年份,即「August_2020」。 但是,我無法找到正確的語法將字元年份“cYear”轉換為數字,以便我可以用它進行數學運算。 我將不勝感激任何指點。 謝謝!!
Names Default To Here( 1 );
SelMonth = {"October_2020"};
cYear = (Regex Match (char(SelMonth), "\d{4}") );
//convert character year to number year
nYear = Num ("cYear"); //Scripting Guide p137
//Subtract 1 and get previous year
pYear = (nYear - 1);
//convert previous year to character
cpYear = Char ( pYear);或者你可以取得變數的最後 4 個字母並將其轉換為數字,這比 Regex 函數更容易
a = "October_2020";
nYear = Num(Right(a, 4));
你有一些小但可以理解的錯誤。
SelMonth = {"October_2020"};
字串周圍的大括號 {} 創造了一個元素清單。 我不知道這是故意的還是無意的。 如果您的實際問題(與您提供的此範例相反)涉及多元素清單(例如{“October_2020”,“November_2020”}),則需要調整接下來的一些內容。 讓我們知道。
去掉大括號即可得到字串值。
SelMonth = "October_2020";
下一個問題是你的下一行:
cYear = (Regex Match (char(SelMonth), "\d{4}") );
正規表示式符合()返回一個列表,該列表將在下一步中給您帶來問題。 它也過於複雜。 相反,單字()函數是你的朋友:如果您只學習一種公式編輯器函數,Word() 就是其中之一。
cYear=Word(2, SelMonth, "_");
show(cYear);
/*:
cYear = "2020";
轉到下一行:
nYear = Num ("cYear");
在這裡,您將變數名稱放在引號中,這使其成為字元文字而不是變數名稱。 相反,您應該:
nYear = Num (cYear);
然而,回到傳回清單的 Regex Match() 函數,這會導致這裡出現問題。Num() 函數不會將列表當作參數。
如果您堅持使用 Regex Match(),則需要使用方括號 [] 作為索引來指定要處理的清單元素。
nYear = Num (cYear[1]);
注意:如果您接受我的建議使用 Word() 函數,則這是不必要的。
將它們放在一起,這就是您所需要的:
Names Default To Here( 1 );
SelMonth = "October_2020";
cYear = (Regex Match (char(SelMonth), "\d{4}") );
cYear=Word(2, SelMonth, "_");
//convert character year to number year
nYear = Num (cYear); //Scripting Guide p137
//Subtract 1 and get previous year
pYear = (nYear - 1);
//convert previous year to character
cpYear = Char ( pYear);
變數「SelMonth」是一個 JMP 列表(即 {} ),因此變數「cYear」的值是一個列表
{"2020"}
假設有一個原因「SelMonth」需要是一個List,簡單的解決方案是用下標引用「cYear」來取得值
nYear = Num (cYear[1]);