0

我有复杂的字符串,我需要在其中提取单个单词和/或多个单词。

这是字符串:

<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="5" yahoo:created="2013-07-28T18:37:23Z" yahoo:lang="en-US"><diagnostics><publiclyCallable>true</publiclyCallable><user-time>145</user-time><service-time>141</service-time><build-version>38483</build-version></diagnostics><results><Result xmlns="urn:yahoo:cate">**RED**</Result><Result xmlns="urn:yahoo:cate">**GREEN**</Result><Result xmlns="urn:yahoo:cate">**BLUE**</Result><Result xmlns="urn:yahoo:cate">**A, E, I, O, U **</Result><Result xmlns="urn:yahoo:cate">**SOMETIMES Y**</Result></results></query><!-- total: 145 -->

(我真的希望它不会滚动,因为它很难看到整个图片)

无论如何,我需要能够拔出:

红色的

绿色

蓝色的

A、E、I、O、U

有时

++++ 顺便说一句,我试图在大字符串中将这些值设为粗体,但它们显示为星号。忽略星号。它们不是字符串的一部分。但是我将它们留在那里,因为当您查看整个字符串时,它使它们更容易找到)++++

我的目标是将那个复杂的字符串变成这样:

红色|绿色|蓝色|A、E、I、O、U|有时是Y

我的偏好是使用单个嵌套函数(或必要时多个函数的组合)在工作表级别执行此操作。

如果做不到这一点,脚本版本将比没有更好。

我一直在使用SPLIT、FIND、SUBSTITUTE 和其他一些我一时兴起尝试的东西——只是为了尝试所有东西。但是我现在已经达到了对此进行清晰思考的饱和点,我希望有人可以让我走上一条如何从逻辑上解决这个问题的道路。

我真的很难过(也很沮丧)。

===========================================

我说如果我找到工作表级别的解决方案,我会发布解决方案,所以就是这样:

=mid(substitute(substitute(regexreplace(mid(A1,find("<Result",A1),find("</query",A1)-find("<Result",A1)),"<.*?>+","-"),"--","|"),"-","|"),2,len(substitute(substitute(regexreplace(mid(A1,find("<Result",A1),find("</query",A1)-find("<Result",A1)),"<.*?>+","-"),"--","|"),"-","|"))-2)
4

1 回答 1

2

您是否考虑过使用 XmlService 服务?https://developers.google.com/apps-script/reference/xml-service

简单的例子:

    /* CODE FOR DEMONSTRATION PURPOSES */
    function testXML() {
      var result = [];
      var document = XmlService.parse('<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="5" yahoo:created="2013-07-28T18:37:23Z" yahoo:lang="en-US"><diagnostics><publiclyCallable>true</publiclyCallable><user-time>145</user-time><service-time>141</service-time><build-version>38483</build-version></diagnostics><results><Result xmlns="urn:yahoo:cate">RED</Result><Result xmlns="urn:yahoo:cate">GREEN</Result><Result xmlns="urn:yahoo:cate">BLUE</Result><Result xmlns="urn:yahoo:cate">A, E, I, O, U</Result><Result xmlns="urn:yahoo:cate">SOMETIMES Y</Result></results></query><!-- total: 145 -->');
      var entries = document.getRootElement().getChildren('results')[0].getChildren();
      for (var i = 0, len = entries.length; i < len; ++i)
        result.push(entries[i].getText());
      Logger.log(result.join('|'));
    }
于 2013-07-28T21:28:52.407 回答