我正在翻译游戏,游戏的文本框每行最多只支持50个字符。有没有办法使用公式来分割整个句子每50个字符或整个单词(49,48,47等)?
我目前正在使用这个公式。
private inline fun doStuff(foo: () -> Unit) = foo.invoke()
这段代码的问题在于,它恰好分为50个字符(一次),并将在单词的中间分割。
所以再一次,我的目标是如果第50个字符位于单词的中间,则不将它分成第50个字符,并且规则也适用于其余的行,因为它仅适用于第一个字符线。
请查看此test google sheet以获取我正在谈论的内容的示例。
如果在Google表格中无法做到这一点,我不介意转移到Excel,只要我获得正常运行的代码。
为了记录,我确实在Google的产品论坛2 days ago中提问,但仍然没有得到答案。
答案 0 :(得分:0)
你非常接近。我不是Sheets的专家,所以不确定这是不是最好的方法,但你的正则表达式对你想要的是错误的。
此外,您需要确定不使用可能出现在短语本身中的拆分字符。但是,使用CHAR(10)
作为替换字符可以在不经过LF
序列的情况下插入JOIN SPLIT
。
将捕获组替换为捕获组,然后替换CHAR(10)
(并删除以下空格)。
最后会有额外的CHAR(10)
,你可以剥离。
编辑由于Google的RE与我习惯之间的行为不同(可能与非回溯正则表达式如何工作有关),正则表达式略有改变。问题出现在你的例子上:
=regexreplace(REGEXREPLACE(REGEXREPLACE(A1 & " ","[\r\n\s]+"," "),"(\S.{0,49})\s","$1" & char(10)),"\n+\z","")
答案 1 :(得分:0)
= REGEXEXTRACT(A1,"(?ism)^"&REPT("([\w\d'\(\),. ]{0,49}\s)", ROUNDUP(LEN(A1)/50,0))&"([\w\d'\(\),. ]{0,49})$")
使用各种表达式进行测试并按预期工作。请注意,只允许使用这些字符[a-zA-Z0-9 _'(),.],这意味着-
和其他未提及的字符将无效。如果需要,可以在REPT表达式中添加它们并完成regexp公式。否则,这将完美地运作。
答案 2 :(得分:0)
=REGEXREPLACE(A1, "(.{1,50})\b", "$1" & CHAR(10))
{50}
恰好匹配50次,但您需要的是50 or less。
\b
是字母边界,用于匹配字母数字和非字母数字字符。