如何在Google表格中将每个字符分成一个新的一行?

我正在翻译游戏,而游戏的文本框只支持每行最多50个字符。 有没有办法使用一个公式来分隔整个句子每50个字符或整个单词(49,48,47等)?

我目前正在使用这个公式。

=JOIN(CHAR(10),SPLIT(REGEXREPLACE(A1, "(.{50})", "/$1"),"/")) 

这个代码的问题是,它正好分裂为50个字符(一次),并且会分裂在这个词的中间。

所以,我的目标是,如果第50个字符位于字中间,那么我的目标就是不要在第50个字符上分割,因为它只适用于第一行,所以规则也适用于其余的行。

请看看这个testing谷歌表来得到我在说什么的例子。

如果在Google表格上无法做到这一点,我不介意转移到Excel提供的代码。

为了logging,我在2天前曾在Google的产品论坛上提出过问题,至今仍未收到答复。

 =REGEXREPLACE(A1, "(.{1,50})\b", "$1" & CHAR(10)) 

{50}恰好匹配50次,但是你需要的是50次或更less

\b是字母数字和非字母数字字符匹配的字边界。

  = REGEXEXTRACT(A1,"(?ism)^"&REPT("([\w\d'\(\),. ]{0,49}\s)", ROUNDUP(LEN(A1)/50,0))&"([\w\d'\(\),. ]{0,49})$") 

testing各种expression和按预期工作。 请注意,只有这些字符[a-zA-Z0-9 _'(),.]是允许的,这意味着-没有提及的其他字符将不起作用。 如果您需要它们,请将它们添加到REPTexpression式中并完成regexp公式。 否则,这将工作完美。

你很近。 我不是Sheets的专家,所以不知道这是否是最好的方法,但是你的Regex对于你想要的是错误的。

另外,您需要确定您不使用可能出现在短语本身中的分隔字符。 但是,使用CHAR(10)代替字符允许您插入LF而无需通过JOIN SPLIT序列。

  1. 用一个空格replace任何换行符,回车符和空格
  2. 匹配以非空格字符开头的string,最多49个字符,后面紧跟空格或string结尾。
  3. 用捕获组replace捕获组,随后使用CHAR(10) (并删除以下空格)。

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

编辑正则expression式由于谷歌的RE和我习惯(可能与非回溯正则expression式如何工作)之间的行为差​​异略有改变。 问题出现在你的例子上:

 =regexreplace(REGEXREPLACE(REGEXREPLACE(A1 & " ","[\r\n\s]+"," "),"(\S.{0,49})\s","$1" & char(10)),"\n+\z","")