【问题标题】:How to extract the hyperlink text from a <a> html tag?如何从 <a> html 标签中提取超链接文本?
【发布时间】:2020-03-26 01:32:07
【问题描述】:

给定一个包含'blabla &lt;a href="address"&gt;text&lt;/a&gt; blabla' 的字符串,我想从中提取'text'
regexp 文档建议'&lt;(\w+).*&gt;.*&lt;/\1&gt;' 表达式,但它提取了整个&lt;a&gt; ... &lt;/a&gt; 事物。
当然我可以像这样继续使用strfind

line = 'blabla <a href="address">text</a> blabla';
atag = regexp(line,'<(\w+).*>.*</\1>','match', 'once');
from = strfind(atag, '>');
to = strfind(atag, '<');
text = atag((from(1)+1):(to(2)-1))

,但是,我可以使用另一个表达式一次找到text 吗?

【问题讨论】:

  • () 中包裹.*(注意,如果字符串中有多个&lt;a&gt;&lt;/a&gt; 对,您实际上应该使用.*?),您可以在第二个元素中获得它的匹配项tok 数组,如果你使用 [atag,tok] = regexp(line,'&lt;(\w+).*&gt;(.*?)&lt;/\1&gt;','match','tokens');
  • extractHTMLText 有用吗?你只想要正则表达式解决方案吗?
  • @DavidS,extractHTMLText 是在 2018a 中推出的,而我正在运行 2016a。

标签: html regex matlab hyperlink


【解决方案1】:

您可以在 Matlab 中使用extractHTMLText 函数,您可以在下面的link 中了解它。 获得所需输出的示例:

line = 'blabla <a href="address">text</a> blabla';
l = split(extractHTMLText(line), ' ');
l{2}

如果您不想使用内置函数,可以按照 Nick 的建议使用 regex

line = 'blabla <a href="address">text</a> blabla';
[atag,tok] = regexp(line,'<(\w+).*>(.*?)</\1>','match','tokens'); 
t = tok(1,1){1};
t{2}

你会得到想要的输出

【讨论】:

  • 谢谢大卫。我终于使用了&lt;a.*&gt;(.*?)&lt;/a&gt;,因为那里有很多&lt;bla&gt;s。检查this
  • @saastn 非常优雅;关于extractHTMLText,你很紧张,它是在 19' 推出的,我不知道你正在开发 16' 版本
【解决方案2】:

您可以简单地使用Group

您的模式更新将是这样的:

<(\w+).*>(.*)<\/\1>

这个包括所有标签:

<.*>(.*)<.*>

Regex101

【讨论】:

    【解决方案3】:

    如果您使用的是 JQuery 试试这个。不需要正则表达式。但是如果 DOM 很大,这可能会对性能产生负面影响。

    $jqueryobj = $(line);
    var text = $jqueryobj.find("a").text();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-09
      • 2011-09-15
      • 1970-01-01
      • 2011-10-07
      • 2016-08-26
      • 2020-06-11
      • 2021-05-05
      相关资源
      最近更新 更多