gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:59 25 4
gpt4 key购买 nike

我正在使用 jsoup 连接到 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>

最佳答案

它不匹配给定的 HTML,因为你的模式 ^\\+?[0-9. ()-]{10,25}$表示条件,您要查找的元素必须包含与给定模式完全匹配的正文。那是因为你用了^在开始和$在模式的末尾,这在大多数情况下是可以的 - 您想要限制所有匹配。

这种模式与

结合使用效果很好
Document.getElementsMatchingOwnText(Pattern pattern)

方法,如果您要查找的电话号码是 HTML 标记的唯一主体,例如如果您正在解析的 HTML 看起来像这样,它将起作用:

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

如何解决?

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

\\+?[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 &
}
}

希望对你有帮助。

关于java - 如何使用正则表达式在 jsoup 文档中获取电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45707137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com