在Google Sheets中从HTML文本中提取href属性

4
我在我的Google电子表格中有大约3000行,每一行包含有关我们网站上一篇文章的数据。在一列(例如A: A)中存储了HTML格式化文本。我需要从此列中提取所有href = ""属性内的URL,并稍后使用它们(可以是数组或以逗号或空格分隔的文本字符串,位于B列中)。
我尝试使用REGEXTRACT公式,但它只给我第一个结果。然后我尝试使用REGEXREPLACE,但我无法编写正确的表达式来仅获取URL链接。
我知道这不是从HTML中获取任何内容的正确方法。是否有另一种方法可以从单个单元格中的HTML文本中提取这些值?
示例数据链接:Google电子表格 非常感谢!我真的很新,对脚本、解析等也不熟悉。

https://regex101.com - TheMaster
谢谢,但是在Google电子表格中使用的正则表达式有些不同,而且并不是所有的都能正常工作。:( - Břeťa
1个回答

6

这些示例怎么样?我使用了href=\"(.*?)\"来获取URL。regex101.com的示例在这里

1. 使用Google电子表格函数:

=TEXTJOIN(CHAR(10),TRUE,ARRAYFORMULA(IFERROR(REGEXEXTRACT(SPLIT(a1,">"),"href="&CHAR(34)&"(.*?)"&CHAR(34)))))

在这种情况下,由于REGEXEXTRACT仅检索第一个匹配的字符串,因此在单元格数据通过SPLIT分离后,可以通过REGEXEXTRACT检索URL。

结果:

enter image description here

2. 使用Google Apps脚本:

function myFunction(str){
  var re  = /href=\"(.*?)\"/g;
  var result = "";
  while ((res=re.exec(str)) !== null) {
    result += res[1] + "\n";
  };
  return result.slice(0,-1);
}

这个脚本可以用作自定义函数。当您使用它时,请将=myFunction(A1)放到单元格中。

结果:

结果与上述方法相同。

如果我误解了您的问题,很抱歉。


非常感谢!这很有帮助!我不知道我可以在REGEXMATCH内部使用SPLIT - Břeťa
@Břeťa 欢迎。谢谢你,我也很高兴能为你提供帮助。 - Tanaike
@Tanaike,我们有没有办法让函数在下一个单元格中显示每个新的切片,而不是全部显示在一个单元格中?例如,如果有10个链接,我希望它们在10个单元格中向下显示,而不是在1个单元格中。 - sojim2
1
@sojim2 虽然我不确定你的具体情况,但如果你想将检索到的URL拆分成行方向的单元格,那么 =TRANSPOSE(SPLIT(B1,CHAR(10))) 怎么样?在这种情况下,包括URL和上述公式在内的文本数据分别放置在单元格“A1”和“B1”中。如果这不是你想要的结果,我很抱歉。 - Tanaike
这正是我正在寻找而不知道存在的结果,谢谢。 - sojim2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接