你好,我有一个正则表达式,可以从 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]);