【问题标题】:Regular Expression to extract inner text from anchor tags along with inner html tags正则表达式从锚标记中提取内部文本以及内部 html 标记
【发布时间】:2018-06-15 00:15:21
【问题描述】:

我想从锚标记中提取内部文本以及从正则表达式中提取内部 html 标记。我尝试过但无法找到。我在下面提供了示例结构。

我的正则表达式是这样的:(class="related-article"(?:\s|\n))href="(.?)"(>(.*?)) "

我需要从下面的 html 内容中匹配我的正则表达式(标签):

<a class="related-article" href="10.1182/blood-2017-11-812990">
                 <i>Blood</i> Commentary</a> on this article in this issue.</p>

【问题讨论】:

  • 使用 JSoup 或类似的东西并解析 HTML 可能更容易。
  • 嗨 @RobbyCornelissen 不使用 JSoup 是否可以匹配我的正则表达式

标签: java html regex


【解决方案1】:

Don't parse HTML with regex.

如果要从 HTML 中提取数据,请使用 XPath

Using XPath in Java

(您问题中的标签建议使用 Java。或者您的意思是 Javascript?)

您的问题将如下所示:

我不是Java用户,而是用C#编程,所以请将此代码作为伪代码方向建议,而不是复制粘贴编译示例。

XPathExpression expr = xpath.compile("//p/a[@class='related-article']");
NodeList list = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
foreach(Node node in list)
{
    string text = node.InnerText;
    string href = node.Attributes["href"].Value;
}

【讨论】:

    【解决方案2】:

    您可能会发现以下内容很有帮助:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public static void main(String[]) {
       String sample = "<!---DOCTYPE><html><body></body></html>";
       Pattern p = Pattern.compile("<(.*?)>");
       Matcher m = p.matcher(sample); 
       while (m.find()) {
          String group = m.group(1);
          if (group.contains("!") {
             continue;
          }
          System.out.print(group);
       }  
    }
    

    返回:htmlbody/body/html

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2014-04-22
      • 1970-01-01
      • 2012-02-13
      相关资源
      最近更新 更多