谷歌表格正则表达式公式将可变长度的泰语文本拆分为不同的单元格,但条件灵活

问题描述 投票:0回答:1

我正在尝试为谷歌表格公式正则表达式替换找到一个正则表达式来划分以下泰语文本,以便更容易管理,即在单独的单元格中使用谷歌翻译公式进行翻译。

(请注意,此文本是混合搭配,以显示我需要处理的长度类型,即它不一定有意义!)

有些文本很长(多个单词在一起,这很好,可以保持这种状态。但有些文本很短,只有 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)
,但没有运气)

也许我正在尝试让正则表达式做太多事情。也许我需要在应用不同的正则表达式公式之前以某种方式使用计数函数...

(请注意,您将看到各种数字参数,例如 14、99、4 等...尝试在表达式中使用一些不同的数字来尝试查看它们是否会产生更好的结果)

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

这会在单词到达空白之前将其切断。我只希望它在到达空白、句号或行尾时被切断。它不能在单词中间中断。

=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"))

拾取每个单词,不允许它们变得更长。

非常感谢任何反馈

regex google-sheets split
1个回答
0
投票

要根据您在 Google 表格中指定的条件实现拆分泰语文本的预期结果,可能需要结合使用正则表达式和某些表格特定的函数。挑战在于标准的复杂性:组合短单词、拆分较长单词以及处理句号等标点符号。

鉴于您概述的限制和要求,以下是在 Google 表格中使用正则表达式公式的潜在解决方案:

  • 标准
    • 如果文本是连续的且超过 15 个字符,请将其放在一个单元格中。
    • 如果有几个小单词(3到5个字母),最多可以连接20个字符。
    • 如果有句号,请勿在同一单元格中包含句号之后的单词。
  • 建议的正则表达式公式
=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|\.|$)
      :此前瞻可确保匹配不包含空格或句号。
    • 用作分割文本的分隔符。您可以将
      替换为文本中未出现的任何字符。
    • TRANSPOSE(SPLIT(…, "♦"))
      :这会在每个
      处拆分替换的文本,并将其转置为单独的行。

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

根据评论更新

鉴于 Google Sheets 使用 RE2 正则表达式库,该库不支持前向 (

?=
) 或后向 (
?<=
) 断言,我们需要修改该方法。由于您的要求对于单个正则表达式模式非常复杂,尤其是在不使用前瞻或后瞻的情况下,更可行的方法可能是使用公式组合或多步骤过程。

这是另一种方法:

  1. 初始分割:使用
    REGEXREPLACE
    在适当的位置插入分隔符(如
    )。
  2. 后处理:使用附加公式根据您的标准细化分割。

这是一个修改后的正则表达式公式,没有前瞻:

=TRANSPOSE(SPLIT(REGEXREPLACE(A1, "(\S{1,5}\s+){0,4}\S{1,5}(?=\s|$|\.)(?:\s|$|\.)*", "$0♦"), "♦"))
© www.soinside.com 2019 - 2024. All rights reserved.