使用requests获取网页后,re.match匹配数字返回None的问题求助
问题解答
核心原因
re.match() 仅会从字符串的起始位置尝试匹配正则表达式。你请求到的r.text是example.com的HTML内容,开头是<html>这类非数字标签,所以即便内容里包含数字,match()也无法匹配到,直接返回None。而你测试的'12345'字符串开头就是数字,因此能正常匹配。
解决办法
- 使用
re.search()替代re.match():search()会扫描整个字符串,找到第一个符合正则规则的内容就返回匹配结果,这是最直接的解决方案:import requests, re r = requests.get('http://example.com') p = re.compile(r'\d') print(p.search(r.text)) - 若坚持使用
match(),可修改正则表达式允许开头存在任意字符,比如:
不过这种写法不如p = re.compile(r'.*\d') print(p.match(r.text))search()直观,仅推荐在特定场景下使用。
另外补充:r.text本身已经是字符串类型,你代码里的str(r.text)属于多余操作,直接使用r.text即可。
内容的提问来源于stack exchange,提问作者Red Dwarf
相关产品推荐
相关产品推荐

