【问题标题】:Google Script - RegexExtract/RegexReplace multi-line contentGoogle Script - RegexExtract/RegexReplace 多行内容
【发布时间】:2020-08-31 06:33:00
【问题描述】:

上下文

  • 包含多行内容的列,我需要从中删除(替换)或提取数据
    原始内容,例如

● image001.png
image002.png
付款参考 - 过程。 7304_18.6T8TIR.pdf
https://mail.google.com/mail/u/0/#inbox/XXXXXXXXXXX
● image005.png
image006.png
付款参考 - 过程。 25258_07.2T8TES.pdf.
https://mail.google.com/mail/u/0/#inbox/YYYYYYYYY.

此订单的内容并不总是如此,并且商品的数量可能会有所不同

我需要什么

  • 最终结果也应该在一个单元格中,例如
    例如

付款参考 - Proc. 7304_18.6T8TIR.pdf
付款参考 - 过程。 25258_07.2T8TES.pdf

它可以包含项目符号,如果它在每个最终结果行的开头结束,则不是问题

到目前为止我有什么

  • 通过使用:

=ArrayFormula(REGEXREPLACE(F3:F,".(?s)image.*.(png)",""))

  • 我明白了:

付款参考 - Proc. 7304_18.6T8TIR.pdf
https://mail.google.com/mail/u/0/#inbox/XXXXXXXXXXX

付款参考 - 过程。 25258_07.2T8TES.pdf.
https://mail.google.com/mail/u/0/#inbox/YYYYYYYYY.

  • 如果我尝试根据我使用的第一个正则表达式替换另一列上的“http...”:

=ArrayFormula(REGEXREPLACE(G3:G,".(?s)http.*",""))

  • 没有什么不同

  • 如果我使用:

=ArrayFormula(REGEXEXTRACT(G3:G,"(?s).*Pay.*|pay.*"))

  • 我得到与第一个 regexreplace 相同的结果,留下不需要的 url

有没有办法一次性从一个单元格删除到另一个单元格(删除具有“图像”+ URL 地址的行) - 或者至少尽可能少的操作 - 或者只提取所有包含“付款”在那个单元格中,到另一个单元格(每行而不是从所有行到一个单元格),在谷歌表格中?

提前致谢

Test Spreadsheet

【问题讨论】:

    标签: google-sheets google-sheets-formula


    【解决方案1】:
    • 您要实现以下转换。

      • 来自

          ● image001.png
          image002.png
          Payment Ref - Proc. 7304_18.6T8TIR.pdf
          https://mail.google.com/mail/u/0/#inbox/XXXXXXXXXXX
          ● image005.png
          image006.png
          Payment Ref - Proc. 25258_07.2T8TES.pdf.
          https://mail.google.com/mail/u/0/#inbox/YYYYYYYYY.
        
      •   Payment Ref - Proc. 7304_18.6T8TIR.pdf
          Payment Ref - Proc. 25258_07.2T8TES.pdf
        
    • 您想将结果值放在一个单元格中。

    模式一:

    在此模式中,它假设从● image###.pnghttps://mail.google.com/mail/u/0/#inbox/XXXXXXXXXXX 的每个值都放在每个单元格中。

    示例公式:

    =ARRAYFORMULA(TEXTJOIN(CHAR(10),TRUE,IFERROR(REGEXEXTRACT(A1:A,"(Payment Ref[\s\w].+\.pdf)"))))
    

    结果:

    模式 2:

    在此模式中,它假设从● image###.pnghttps://mail.google.com/mail/u/0/#inbox/XXXXXXXXXXX 的所有值都放在一个单元格中。

    示例公式:

    =ARRAYFORMULA(TEXTJOIN(CHAR(10),TRUE,IFERROR(REGEXEXTRACT(A1:A,REGEXREPLACE(A1:A,"(Payment Ref[\s\w].+\.pdf)","($1)")))))
    

    结果:

    注意:

    • 在两个示例公式中,每个值 Payment Ref - Proc. 7304_18.6T8TIR.pdf 都是使用 REGEXEXTRACT 检索的。并且使用TEXTJOIN 将值放在一个单元格中。

    参考资料:

    补充:

    示例公式:

    =ARRAYFORMULA(TRIM(REGEXREPLACE(B2:B,"(● | ● )?image[ \S\w]+\n|https.+\n?|\.\n","")))
    

    结果:

    【讨论】:

    • 非常完整的答案!
    • 感谢您的帮助。我创建了一个测试电子表格,因为我认为 a)我做错了什么,b)我没有正确解释自己,c)两者都有! :) 模式 2 似乎工作得更好,但它加入了所有行的付款参考,它应该只显示每行的值。这是link
    • @user1128912 感谢您的回复。我深表歉意,我无法假设您共享电子表格中的各种值。从您共享的电子表格中,我又提出了一个示例公式。你能确认一下吗?如果这不是您期望的方向,我再次道歉。
    • @Tanaike 再次感谢您的努力和帮助。确实,就是这样!我的正则表达式选择很差,而你的就可以了。此外,修剪是经过深思熟虑的。谢谢你的解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多