基本上,我必须在Google表格上写一个公式,在该公式出现一次后,我可以用所有出现的某个数值替换为另一个数值。
例如,某个字符串说"Draw {0} cards."
,其中{0}
是一个可变数字,它将在以后的阶段中替换另一个字符串(值,特定单词,无论如何)。
我必须将此结果与另一个特定的字符串连接起来:
"Deal {0} damage."
因此,它应该看起来像:"Draw {0} cards. Deal {0} damage."
但是,系统不包含这样的字符串,因此公式必须将表达式更改为"Draw {0} cards. Deal {1} damage."
。这意味着,只要数字已经出现在字符串上,就必须用下一个替换它的下一个出现。
我知道我可以使用类似的公式
=SUBSTITUTE(B27;"0";"1";2)
B27
是我连接前两个字符串的单元格。
这里的主要问题是,通常我不会将两个不同的字符串连接在一起。有时会有超过3或4个字符串组合在一起,并且大多数情况下这些字符串在序列中具有自己的变量。
例如,如果我要连接这三个不同的字符串,则先前的公式将无法正常工作:
"Draw {0} cards."
"Deal {0} damage to {1} players."
"Gain {0} life and discard {1} cards."
简单串联这些字符串将导致:
"Draw {0} cards. Deal {0} damage to {1} players. Gain {0} life and discard {1} cards."
但是要使其正常工作,我必须得到类似以下结果:
"Draw {0} cards. Deal {1} damage to {2} players. Gain {3} life and discard {4} cards."
这里有人可以帮我解决这个问题的公式吗?是否有任何Google表格公式可以提供帮助?我的意思是,我是游戏设计师,而不是程序员,所以脚本和一些代码解决方案对我来说很难工作。
非常感谢您的关注。
答案 0 :(得分:0)
您可以这样做:
="""Draw {"&C2&"} cards."""&CHAR(10)&
"""Deal {"&D2&"} damage to {"&E2&"} players."""&CHAR(10)&
"""Gain {"&F2&"} life and discard {"&G2&"} cards."""
或者您可以这样做:
="""Draw {"&D11&"} cards."""&CHAR(10)&
"""Deal {"&D11+1&"} damage to {"&D11+2&"} players."""&CHAR(10)&
"""Gain {"&D11+3&"} life and discard {"&D11+4&"} cards."""
答案 1 :(得分:0)
您可以对字符串进行正则表达式并替换它们。
以下脚本将字符串作为输入,然后仅替换所有出现的{0},{2},{4}等,并用正确的数字替换。
基本上,它使用正则表达式确定模式出现的频率,然后遍历字符串并进行更改。
// String used for tests
var string = 'Draw {0} cards.Deal {0} damage to {1} players.Gain {0} life and discard {1} cards.'
// Actual function
function changeString(input){
var re = /({[0-9]{1,5}})/g;
var totalMatches = count(input);
// Internal function to count the occurrance of matches of {number} (up
to five digits inside brackets)
function count(input){
return ((input || '').match(re) || []).length
}
// Internal function to replace the n-th input and return a modified
string
function replaceNthElement(input, re, n, transform) {
let count = 0;
return input.replace(
re,
match => n(++count) ? transform(match) : match);
}
// Iterating over the string in order to change all occurrences of
{number}
for (var n = 0; n <= totalMatches; n++) {
input = replaceNthElement(input, re, count => count === n, sstr => '{' + (n-1) + '}');
}
return input;
};
// for demonstration only
console.log("Original String: " + string);
console.log("Changed String: " + changeString('Draw {0} cards.Deal {0} damage to {1} players.Gain {0} life and discard {1} cards.'));