什么谷歌表格regex公式将拆分成不同的单元格,但具有灵活的条件长度的泰国文本

yqyhoc1h  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(88)

我正试图找到一个正则表达式的谷歌表公式regexreplace划分以下泰语文本,使它更容易管理IE在单独的单元格中使用谷歌翻译公式翻译。
(note这段文字是一个混合和匹配,以显示类型的长度,我需要处理(它不一定有意义!)
有些文本很长(多个单词在一起,这很好,可以保持这种方式。但有些是非常短的,只有3,4或5个字符,我不想打破他们,如果他们太短,即合并短单词到一个单一的单元格-只是不能太长!

关键标准因此,如果文本是连续的,超过15个字符,那么它将被放在一个单元格中。如果它是几个小单词,说3至5个字母的单词由空格分隔,那么他们可以连接,但这应该被限制在说20个字符。如果有一个句号,那么不包括在同一个单元格中的句号后的单词,即使他们不会加起来20字符.

提前谢谢你的帮助/建议

กถามรรคที่เล่าเรื่องตั้งแต่ พระมหาสัตว์ได้ตั้งปรารถนาอย่างจริงจัง ณ เบื้องบาทมูลของพระพุทธเจ้าทรงพระนามว่า ทีปังกร จนถึงจุติจากอัตภาพเป็นพระเวสสันดร แล้วไปเกิดในสวรรค์ชั้นดุสิต จัดเป็น ทูเรนิทาน.
บทว่า ขณนฺตา แปลว่า ขุดภาคพื้น.
ศัพท์ว่า อุท ในบทว่า อุทงฺคเณ นี้ เป็นนิบาต อธิบายว่า ในที่ลานกลางแจ้ง.

字符串
成为

กถามรรคที่เล่าเรื่องตั้งแต่
พระมหาสัตว์ได้ตั้งปรารถนาอย่างจริงจัง ณ
เบื้องบาทมูลของพระพุทธเจ้าทรงพระนามว่า 
ทีปังกร (because the preceding and following text (word/s) are long (ie without any white space)
จนถึงจุติจากอัตภาพเป็นพระเวสสันดร 
แล้วไปเกิดในสวรรค์ชั้นดุสิต 
จัดเป็น ทูเรนิทาน.
ศัพท์ว่า อุท ในบทว่า 
อุทงฺคเณ นี้ เป็นนิบาต 
อธิบายว่า ในที่ลานกลางแจ้ง.


我一直在使用不同的人工智能机器人来帮助,并试图修改他们,但不是运气...(我也添加分裂,转置或展平,以放置到单独的单元格/行-但这部分似乎是罚款,虽然我已经尝试使用char(10)以及没有运气)
也许我试图让一个正则表达式做太多的事情。也许我需要在应用不同的正则表达式公式之前以某种方式使用一个计数函数...
(note您将看到各种数字参数,例如14、99、4等...尝试在表达式中使用一些不同的数字,以尝试查看它们是否产生更好的结果)

=TRANSPOSE(SPLIT(REGEXREPLACE(G2,"(.{1,20})(\s+|$|\.)", "♦$1"), "♦"))


这会在字到达白色处之前切断字。2我只希望它在到达空白处、句号或行尾时切断。3它不能在字的中间切断。

=FLATTEN(split(REGEXREPLACE(G2,"((\S+\s+){1,4}\S.{14,99})(\s+|$)","$1 ^^^"),"$1 ^^^"))


这只是根据空格来提取每个单词。所以有些单词太短了。

=TRANSPOSE(REGEXREPLACE(G1, "({\w{1,2}\s+}|[^\s]{4,444})","$1"))


在不允许单词变长的情况下拾取每个单词。
非常感谢您的反馈

myss37ts

myss37ts1#

要根据您在Google表格中指定的条件实现拆分泰语文本的预期结果,可能需要正则表达式和某些特定于表格的函数的组合。挑战在于条件的复杂性:组合短单词,拆分长单词,以及处理标点符号(如句号)。
考虑到您概述的约束和要求,这里有一个在Google表格中使用正则表达式公式的潜在解决方案:

*标准

  • 如果文本是连续的并且超过15个字符,则将其放在一个单元格中。
  • 如果有几个小单词(3到5个字母),它们可以连接到20个字符。
  • 如果有一个句号,不要在同一单元格中包含句号之后的单词。
    *建议的Regex公式
=TRANSPOSE(SPLIT(REGEXREPLACE(A1, "((?:\S{1,5}\s+){0,4}\S{1,5})(?:\s+|$|\.)(?=\s|\.|$)", "$1♦"), "♦"))

字符串

*说明

  • ((?:\S{1,5}\s+){0,4}\S{1,5}):这部分最多匹配20个字符,考虑3到5个字符的单词。它允许最多四个这样的单词后跟第五个单词,每个单词由空格分隔。
  • (?:\s+|$|\.):此部分检查空格、行尾或句号。
  • (?=\s|\.|$):这个lookahead确保匹配不包括空格或句号。
  • 用作分隔符来分割文本。您可以将替换为文本中未出现的任何字符。
  • TRANSPOSE(SPLIT(…, "♦")):这将在每个处拆分替换的文本,并将其转置到单独的行中。

请记住,正则表达式可能非常具体,数据中的微小变化可能需要调整公式。此外,泰语脚本及其结构的复杂性可能会带来仅凭正则表达式无法完全解决的挑战。测试和调整对于优化结果至关重要。

根据评论更新

由于Google Sheets使用的是RE2正则表达式库,它不支持lookahead(?=)或lookbehind(?<=)Assert,因此我们需要修改方法。由于您的需求对于单个正则表达式模式来说非常复杂,特别是在不使用lookahead或lookbehind的情况下,更可行的方法可能是使用公式或多步过程的组合。
这里有一个替代方法:
1.初始分割:使用REGEXREPLACE在适当的位置插入一个字符串(类似于)。
1.后期处理:根据您的条件,使用额外的公式来细化拆分。
下面是一个修改后的正则表达式公式,没有lookahead:

=TRANSPOSE(SPLIT(REGEXREPLACE(A1, "(\S{1,5}\s+){0,4}\S{1,5}(?=\s|$|\.)(?:\s|$|\.)*", "$0♦"), "♦"))

相关问题