代码之家  ›  专栏  ›  技术社区  ›  Sudhir Tiwari

如何使用正则表达式在jsoup文档中获取电话号码

  •  4
  • Sudhir Tiwari  · 技术社区  · 7 年前

    http://www.wellclean.com/ 我在打印文档时检查了文档中包含的电话号码。

    String regex_num = "^\\+?[0-9. ()-]{10,25}$";
    Pattern pattern = Pattern.compile(regex_num);
    Document doc  = Jsoup.connect(url)
            .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0")
            .maxBodySize(0)
            .timeout(600000)
            .get();
    
    Elements Phone_Num=doc.getElementsMatchingOwnText(pattern);// match regex in doc
    if(!Phone_Num.isEmpty()) // if phone number exist
    {
        System.out.println("Phone number found!");
        for(Element e : Phone_Num)
        {
            PNUM=PNUM+e.text().toString()+" & "; // store all phone number seperated by &
        }
    
    }
    

    当我打印文档时,它包含以下格式的电话号码

    <div class="contact_address">
         <div class="contact_column_1">
          2261 N. Clybourn Ave.
        <br> Chicago, IL 60614
        <br> Ph: (773) 348.2226
        <br> 
        <a href="http://maps.google.com/maps?q=2261+N.+Clybourn+Ave.Chicago,+IL+60614&amp;hl=en&amp;sll=41.923214,-87.666462&amp;sspn=0.014417,0.029268&amp;gl=us&amp;hnear=2261+N+Clybourn+Ave,+Chicago,+Cook,+Illinois+60614&amp;t=m&amp;z=17" target="_new"><img src="/wp-content/themes/artgallery_3.0/images/map.png" alt="map"></a>
        <br> Hours:
        <br> M-S 7:30am – 7:00pm
        <br> Sun 9:00am – 5:00pm
       </div> 
       <div class="contact_column_2">
        &nbsp;
        <br>&nbsp;
    </div> 
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Szymon Stepniak    7 年前

    它与给定的HTML不匹配,因为您的模式 ^\\+?[0-9. ()-]{10,25}$ 包含完全匹配给定模式的主体。因为你用过 ^ $

    此图案与

    Document.getElementsMatchingOwnText(Pattern pattern)
    

    <br> Ph: <span>(773) 348.2226</span>
    

    如何解决?

    在这种情况下,您必须更新模式,以允许电话号码只是身体一部分的匹配元素:

    \\+?[0-9. ()-]{10,25}
    

    e.text() 退货

    2261 N. Clybourn Ave. Chicago, IL 60614 Ph: (773) 348.2226 Hours: M-S 7:30am – 7:00pm Sun 9:00am – 5:00pm
    

    因为这是一个全文 <div class="contact_column_1"> 要素在这种情况下,您必须使用相同的模式提取电话号码,例如:。

    for(Element e : Phone_Num)
    {
        Matcher matcher = pattern.matcher(e.text());
        if (matcher.find()) {
            PNUM += matcher.group(0).trim() + " & "; // store all phone number seperated by &
        }
    }
    

        2
  •  2
  •   Luk    7 年前

    我认为你必须处理你的正则表达式。

    <tag>(773) 348.2226</tag>.

    <div class="contact_column_1">