import re if __name__ == "__main__": url = " ### deded<a href = 'xxx'>这是第一个链接</a><a href = 'xxx'>这是第二个链接</a> ### " # 1-1 清除#,str.replace(old, new) newurl1 = url.replace("#", "") print("第一步 1: ", newurl1) # 1-2 清除#,正则替换 p1 = re.compile(r"#+") newurl2 = p1.sub("", url) print("第一步 2: ", newurl2) # 2 去除首尾空格, str.strip() newurl = newurl2.strip() print("第二步: ", newurl) # 3 match 查找是否存在内链(从字符串开始处匹配,若匹配成功返回,若开头没有匹配上则返回None) p2 = re.compile(r"<a.*?>.*?</a>") match = p2.match(newurl) if match is not None: print("第三步: ", match.group()) # 4 search 查找是否存在内链(可以从字符串任意位置开始匹配,查找整个字符串,直到成功匹配后返回,匹配失败返回None) search_match = p2.search(newurl) if search_match is not None: print("第四步: " + search_match.group()) # 5 提取所有内链url中的文本,非贪婪匹配 + 分组捕获() p3 = re.compile(r"<a.*?>(.*?)</a>") textlist = p3.findall(newurl) print("第五步: ", textlist) # 6 提取所有内链url,非贪婪匹配 p4 = re.compile(r"<a.*?/a>") linklist = p4.findall(newurl) print("第六步: ", linklist)
输出结果:
第一步 1: deded<a href = 'xxx'>这是第一个链接</a><a href = 'xxx'>这是第二个链接</a> 第一步 2: deded<a href = 'xxx'>这是第一个链接</a><a href = 'xxx'>这是第二个链接</a> 第二步: deded<a href = 'xxx'>这是第一个链接</a><a href = 'xxx'>这是第二个链接</a> 第四步: <a href = 'xxx'>这是第一个链接</a> 第五步: ['这是第一个链接', '这是第二个链接'] 第六步: ["<a href = 'xxx'>这是第一个链接</a>", "<a href = 'xxx'>这是第二个链接</a>"]