使用 importxml 和 substring-after 提取子字符串

Extract substring using importxml and substring-after

使用 Google sheet 'ImportXML',我能够使用以下方法从 url(在单元格 A2 中)中提取以下数据:

=IMPORTXML(A2,"//a/@href[substring-after(., 'AGX:')]").

数据:

/vector/AGX:5WH
/vector/AGX:Z74
/vector/AGX:C52
/vector/AGX:A27
/vector/AGX:C6L

但是,我想提取“/vector/AGX:”之后的代码。代码不固定为3个字母,行数也不固定

我用了=INDEX(SPLIT(AP2,"/,'vector',':'"),1,2)。但它只适用于一行数据。必须将 index+split 函数复制到整个列,并且必须插入一个额外的列来存储代码。

5WH
Z74
C52
A27
C6L

但是,我希望能够在 AGX 之后提取代码:一次性使用 ImportXML。有办法吗?

解决方案

您的问题在于如何实施 index 公式。第一个参数 return 是行(在你的例子中是每个元素),第二个参数是列(在你的例子中是 AGX 或之后的代码)。

如果我们不是获取单个单元格,而是将此公式应用于一个范围并且我们没有为该行设置任何值,则该公式将 return 所有值实现您的目标。这是它的实现 (其中 F1:F5 将是您希望应用此公式的值范围) :

=INDEX(SPLIT(F1:F5,"/,'vector',':'"),,2)

如果您对仅使用 IMPORTXMLXPATH 的解决方案感兴趣,根据 the documentation,您可以使用 substring,如下所示:

=IMPORTXML(A1,"//a/@href[substring-after(.,'SGX:')]")

这样做的缺点是它会 return 完整的字符串,而不仅仅是 SGX: 之后的内容,这意味着您需要使用 Google sheet 拆分这个的公式。这是我完全使用 XPath 取得的最大成就。在 XML 中应用 forEach 会更容易,实际上 select 在 : 之后是什么,但我相信 sheets 如果不是不可能的话会更复杂只使用 XPath。

希望对您有所帮助。让我知道您是否需要其他任何东西或者您不明白什么。 :)