python中使用的正则表达式给出未知结果

python中使用的正则表达式给出未知结果,python,regex,python-3.x,web-scraping,Python,Regex,Python 3.x,Web Scraping,我用python编写了一个脚本,使用正则表达式从两个不同的站点查找电话号码。当我尝试使用下面的模式在本地刮取这两个电话号码时,它可以完美地工作。然而,当我在网站上尝试同样的方法时,它就不再有效了。它只获取两个未识别的数字1999和8211 这就是我迄今为止所尝试的: import requests, re links=[ 'http://www.latamcham.org/contact-us/', 'http://www.cityscape.com.sg/?page_id=3

我用python编写了一个脚本,使用
正则表达式
从两个不同的站点查找电话号码。当我尝试使用下面的模式在本地刮取这两个电话号码时,它可以完美地工作。然而,当我在网站上尝试同样的方法时,它就不再有效了。它只获取两个未识别的数字
1999
8211

这就是我迄今为止所尝试的:

import requests, re

links=[
    'http://www.latamcham.org/contact-us/',
    'http://www.cityscape.com.sg/?page_id=37'
    ]

def FetchPhone(site):
    res = requests.get(site).text
    phone = re.findall(r"\+?[\d]+\s?[\d]+\s?[\d]+",res)[0]  #I'm not sure if it is an ideal pattern. Works locally though
    print(phone)

if __name__ == '__main__':
    for link in links:
        FetchPhone(link)
我希望得到的结果是:

+65 6881 9083
+65 93895060
这就是我所说的本地:

import re

phonelist = "+65 6881 9083,+65 93895060"

phone = [item for item in re.findall(r"\+?[\d]+\s?[\d]+\s?[\d]+",phonelist)]
print(phone)  #it can print them

Post脚本:电话号码不是动态生成的。当我打印文本时,我可以在控制台中看到
数字。

在下面的例子中,正则表达式应该返回所需的输出

r"\+\d{2}\s\d{4}\s?\d{4}"
请注意,它可以应用于上述模式:

  • +6568819083
  • +65 93895060

在其他情况下可能不起作用

您正在使用的
\d+\s?\d+
将匹配
9
99
1999
,因为
+
量词允许第一个
\d+
抓取尽可能多的数字,同时将至少一个数字留给其他数字。一种解决方案是陈述你想要的特定重复次数(如安德森的回答)


我建议您尝试regex101.com,它将突出显示以帮助您可视化regex匹配和捕获的内容。在那里,您可以粘贴一个要搜索的文本示例,并调整正则表达式。

本地删除它们是什么意思?你试过打印
res
并查看它是否包含电话号码吗?试过
r“\+?\d{1,3}\s?\d{4}\d{4}”
我试过你建议的表达式@Wiktor Stribiżew,得到了这个
3333333 14465014376
。谢谢。谢谢你的解决方案,先生。我知道这在其他情况下是行不通的。然而,我想看看如何将正则表达式应用于解析来自web的电话号码。