有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java需要帮助使用正则表达式来提取标记中的数据

一段时间以来,我一直在努力创建一个正则表达式,以满足我对下面HTML的需求。我正在使用java。util。正则表达式。*由于不同的原因,我需要使用这个包,而不是任何第三方库

我想要的是提取标签中的数据,所以在这个特定的HTML中我想要的数据是25/25,Lindhagen,0,Spinninghall,35和Test Person

是否可以为此创建正则表达式

<div id="rsv_detail">
  <hr />

  <label>Bokningsstatus</label>
  <span>&nbsp;</span>

  <label>Bokningar</label>

  <span>25 / 25 &nbsp;</span>

  <br />

  <label>Plats</label>
  <span>Lindhagen&nbsp;</span>

  <label>Anlänt</label>
  <span>0&nbsp;</span>

  <br />

  <label>Sal</label>
  <span>Spinninghall&nbsp;</span>

  <label>Max antal</label>
  <span>35&nbsp;</span>
  <br />

  <label>Ledare</label>

  <span>Test Person&nbsp;</span>
  <br /><br />


  <label>Visa mer</label>
  <span>      
    <a href="/index.php?instructors%5B%5D=X129518&amp;func=la&amp;tak=0.36507500+1302460619">Ledare</a>
    <a href="/index.php?locations=LI&amp;func=la&amp;tak=0.36507500+1302460619">Plats</a>
    <a href="/index.php?activities=SP_MEDEL&amp;func=la&amp;tak=0.36507500+1302460619">Aktivitet</a>

  </span>
  <br /><br />

  <br />
  <br />
  <hr />
</div>

共 (2) 个答案

  1. # 1 楼答案

    Pattern p = Pattern.compile("<span>([^<&]+)&nbsp;</span>");
    Matcher m = p.matcher(text);
    while (m.find())
    {
      System.out.println(m.group(1));
    }
    

    输出:

    25 / 25
    Lindhagen
    0
    Spinninghall
    35
    Test Person
    

    这假设目标<span>始终以&nbsp;结尾,并且从不包含任何其他实体或元素

  2. # 2 楼答案

    如果过滤掉同一行中未打开和关闭span标记的每一行,可以使用:

    filtered.replaceAll ("<span>([^<]*)</span>", "$1")
      .replaceAll ("&nbsp;", "")
    

    巴拉特黑塞人建立了一个捕获群,你以后可以通过第一个数字从左到右引用它——这里只有一个,因此是1美元。在开始标记之后,你阅读所有内容,除了一个小于号,你希望它是结束标记,直到结束标记

    然而,在大多数情况下,我会同意斯特玛和装满鳗鱼的气垫船。html中正则表达式的陷阱有:

    • 如果打开和关闭标记跨越多行,那么在正则表达式中很难找到,如果它们是嵌套的,则更难找到
    • 评论中的标签很难被发现

    然而,在极少数情况下,正则表达式是有用的:

    • 一次性工作,你监督所有未来的投入
    • 从路由器或javadocs生成的HTML,看起来总是一样的
    • HTML,这是您根据自己的程序构建的