如何基于URL模式利用正则表达式提取URL中的指定数字?
从URL中提取指定数字的解决方案
嘿,我来帮你搞定这个问题~你原来的代码用了re.sub,但这个方法是替换匹配到的内容,你把整个匹配的URL替换成了空字符串,所以输出自然是空的。我们需要的是提取括号里捕获的数字部分,而不是替换,所以得换个思路:
方法一:使用re.search提取捕获组
先找到匹配的正则对象,再取出第一个捕获组的内容:
import re # 别忘了导入re模块哦 urlss = 'http://www.deyi.com/thread-24488-1-1.html' # 用正则匹配URL结构,捕获中间的数字部分 match_result = re.search(r'http://www.deyi.com/thread-(.*?)-1-1.html', urlss) if match_result: target_num = match_result.group(1) print(target_num) # 输出:24488
方法二:更精准的正则(推荐)
因为我们明确要提取的是数字,所以用\d+(匹配一个或多个数字)来替代.*?,这样能避免意外匹配到非数字字符:
import re urlss = 'http://www.deyi.com/thread-24488-1-1.html' match_result = re.search(r'thread-(\d+)-1-1\.html', urlss) if match_result: print(match_result.group(1)) # 输出:24488
为什么原来的代码不行?
你之前的re.sub('http://www.deyi.com/thread-(.*?)-1-1.html', '', urlss)是把整个符合规则的URL字符串替换成空,相当于“删掉匹配到的内容”,所以最终输出是空字符串,而不是捕获的数字。
内容的提问来源于stack exchange,提问作者wen tian
相关产品推荐
相关产品推荐

