我使用regular expression
在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
发布脚本:电话号码不是动态生成的。当我打印文本时,我可以在控制台中看到numbers
。
答案 0 :(得分:1)
在你的情况下,正则表达式应返回所需的输出
r"\+\d{2}\s\d{4}\s?\d{4}"
请注意,它可以应用于上述架构:
可能在其他情况下不起作用
答案 1 :(得分:0)
您使用的\d+\s?\d+
与9 9
,99
和1999
匹配,因为+
量词允许第一个\d+
抓取尽可能多的数字,同时将至少一个数字留给其他人。一种解决方案是陈述您想要的特定重复次数(如Andersson的答案)。
我建议您尝试使用regex101.com,它会突出显示以帮助您可视化正则表达式匹配和捕获的内容。在那里,您可以粘贴要搜索的文本示例并调整正则表达式。