【问题标题】:getting substring regex java获取子字符串正则表达式java
【发布时间】:2015-11-22 00:10:51
【问题描述】:

我有这样的一行: <a href="/verona/4mktg-for-marketing.8526695" title="4MKTG FOR MARKETING SRL">4MKTG FOR MARKETING <strong>SRL</strong> </a>

我需要该字段的标题。我用 'title="' 分割字符串,然后检查它是否与这个正则表达式匹配:"[0-9A-Z /.]{3,}"。但它不起作用......

该字段仅包含数字、大写字母、空格和点

谢谢

大卫

【问题讨论】:

  • 你必须使用正则表达式吗?如果没有,可以找到 "title=\"" 的开始位置,并从 title" 结束的位置获取子字符串到下一个双引号。

标签: java regex string


【解决方案1】:

在处理 HTML 时,应该使用 JSoup,而不是使用正则表达式。

Document doc = Jsoup.parse(html);
Element links = doc.select("a");
for (Element l : links) {
    // grab the title attribute value
    System.out.println(l.attr("title"));
}

【讨论】:

  • 同意,任何时候解析已知格式(html、xml、json)时不要使用正则表达式
【解决方案2】:
title="([\dA-Z\. ]+)"

Debuggex Demo

【讨论】:

    【解决方案3】:

    如果您需要使用正则表达式(并使用java.util.regex,请参阅this answer,考虑到Java 中的类似PERL 的正则表达式):

    str = '<a href="/verona/4mktg-for-marketing.8526695" title="4MKTG FOR MARKETING SRL">4MKTG FOR MARKETING <strong>SRL</strong> </a>';
    str = str.replaceAll('.* title="([\s\.A-Z0-9]+)".*', "$1");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-07
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2011-06-26
      • 2020-05-13
      相关资源
      最近更新 更多