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

时间:2018-04-18 20:13:07

标签: python regex python-3.x web-scraping

我使用regular expression在python中编写了一个脚本来查找来自两个不同站点的电话号码。当我尝试使用以下模式在本地刮取两个电话号码时,它可以完美地工作。但是,当我在网站上尝试相同时,它不再有效。它只会获取两个未识别的数字19998211

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

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

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

2 个答案:

答案 0 :(得分:1)

在你的情况下,正则表达式应返回所需的输出

r"\+\d{2}\s\d{4}\s?\d{4}"

请注意,它可以应用于上述架构:

  • +65 6881 9083
  • +65 93895060

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

答案 1 :(得分:0)

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

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