当前位置: 首页 > 知识库问答 >
问题:

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

湛宏旷
2023-03-14

我使用jsoup连接到url并加载文档,然后使用正则表达式检查文档是否包含它。但它在某些情况下失败了。下面的代码从一些URL获取所有电话号码,但在其他URL中失败,例如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个答案

萧辰沛
2023-03-14

我认为你必须改进你的正则表达式。

您正在使用方法getElementsMatchingOwnText,并且您的正则表达式中有^和$,这意味着您只能找到跨越整个标签的电话号码,即

在您的示例中,html电话号码只是以

陶朝明
2023-03-14

它与给定的HTML不匹配,因为您的模式^\\?[0-9.-]{10,25}$表示条件,您要查找的元素必须包含与给定模式完全匹配的主体。这是因为您在模式的开头使用了^,在模式的结尾使用了$,这在大多数情况下是可以的——您希望限制所有匹配。

此图案与

Document.getElementsMatchingOwnText(Pattern pattern)

方法如果您正在查找的电话号码是HTML标记的唯一主体,例如,如果您正在解析的HTML如下所示,则该方法将起作用:

<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

因为这是的纯文本正文

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 &
    }
}

我希望有帮助。

 类似资料:
  • 我正试图建立一个全面的正则表达式来验证电话号码。理想情况下,它将处理国际格式,但它必须处理美国格式,包括以下内容: 我将用我目前的尝试来回答,但我希望有人有更好和/或更优雅的东西。

  • 本文向大家介绍java正则表达式的应用 java读取文件并获取电话号码,包括了java正则表达式的应用 java读取文件并获取电话号码的使用技巧和注意事项,需要的朋友参考一下 实现功能:读取文件,将其中的电话号码存入一个Set返回。 方法介绍: find():尝试查找与该模式匹配的输入序列的下一个子序列。 group():返回由以前匹配操作所匹配的输入子序列。 1、从一个字符串中获取出其中的电话号

  • 问题内容: 该字符串不应包含SSN或电话号码。下面的正则表达式不起作用,它仅接受xxxxxxxxx格式。 不应包含或或。 问题答案: 您可以尝试: 解释一下,如果我们阅读了您提供的查询: 我们可以读到:( 在我的顶部版本中,我改写为:。)。 保证世界上任何字符串都不匹配其中至少两个,因此它们的组合始终为真,从而为您提供了一个简单得多的有效正则表达式: 是零宽度的断言,因此它不消耗任何东西。即使匹配

  • 我正在修改一个脚本。该脚本包含一个表单,允许访问者向电话号码发送短信。在表单中,我有一个文本框,用户在其中输入文本接收器的电话号码。我正在使用正则表达式验证电话号码,以防止垃圾邮件发送者,并确保用户键入正确的号码。 以下是阿富汗使用的默认电话号码: 正则表达式验证首先应该确保使用93,然后确保在93之后使用78、77、79或700(其中之一),最后是6位数。 下面是我试图修复的Javascript

  • 问题内容: 我必须从自由形式的文本中提取电话号码。 如何在python中使用reg-ex进行管理? 我找到了一个,以便提取电子邮件地址。https://gist.github.com/dideler/5219706 我已经通过使用电话号码正则表达式而不是电子邮件地址正则表达式实现了相同的方法,但是我无法获得输出。 我该如何做呢? 问题答案: 此正则表达式与来自北美的典型电话号码匹配 匹配33344

  • 在注册会员时,经常需要输入电话号码,电话号码是指手机号码或者固定电话。如果输入的内容不合法,则会向用户输出提示。本实例模拟实现电话号码的验证功能,接收用户在控制台输入的电话号码,然后进行判断,并将结果输出。 在这里使用《 Java正则表达式》一节中讲到的正则表达式支持的字符来实现,步骤如下。 (1) 创建名为 Test21.java 的 Java 文件,在 main() 方法中开始编写代码。 (2