如何在Google表格上的每个x字符中将短语拆分为新行?

时间:2017-08-19 00:07:29

标签: excel split google-sheets formula

我正在翻译游戏,游戏的文本框每行最多只支持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中提问,但仍然没有得到答案。

3 个答案:

答案 0 :(得分:0)

你非常接近。我不是Sheets的专家,所以不确定这是不是最好的方法,但你的正则表达式对你想要的是错误的。

此外,您需要确定不使用可能出现在短语本身中的拆分字符。但是,使用CHAR(10)作为替换字符可以在不经过LF序列的情况下插入JOIN SPLIT

  1. 使用单个空格替换所有换行符,回车符和空格
  2. 匹配以非空格字符开头的字符串,后跟最多49个字符,后跟空格或字符串的结尾。
  3. 将捕获组替换为捕获组,然后替换CHAR(10)(并删除以下空格)。

  4. 最后会有额外的CHAR(10),你可以剥离。

  5. 编辑由于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是字母边界,用于匹配字母数字和非字母数字字符。