正则表达式

findall

import re

# 基础使用
a = "Hello 123 world"
assert re.findall(r'\d\d\d', a) == ['123']
content = 'Hello 123 world 456 华小智Python基础教学135'
assert re.findall(r'\d\d\d', content) == ['123', '456', '135']

"""非贪婪(.*?)

(.*?)用于提取文本A与文本B之间的内容,并不需要知道内容的确切长度和格式,但是需要知道内容位于哪两串文本之间。
"""
p_source = '文本A(.*?)文本B'
res = '文本A百度新闻文本B'
assert re.findall(p_source, res) == ['百度新闻']
res = '文本A百度新闻文本B,新闻标题文本A新浪财经文本B,文本A搜狐新闻文本B新闻网址'
assert re.findall(p_source, res) == ['百度新闻', '新浪财经', '搜狐新闻']
# 从网页html代码提取信息
res = '<span class="c-color-gray c-font-normal c-gap-right">东方财富网</span>'
p_source = '<span class="c-color-gray c-font-normal c-gap-right">(.*?)</span>'
assert re.findall(p_source, res) == ['东方财富网']

"""非贪婪.*?

.*?用于替代文本A和文本B之间的所有内容。之所以要用这个, 是因为文本A和文本B之间的内容经常变动或没有规律,无法写到匹配规则里。
"""
res = '<h3>文本C<变化的网址>文本D新闻标题</h3>'
p_title = '<h3>文本C.*?文本D(.*?)</h3>'
assert re.findall(p_title, res) == ["新闻标题"]

"""re.S 让 '.' 特殊字符匹配任何字符,包括换行符"""
res = '''文本A\n百度新闻文本B'''
p_source = '文本A(.*?)文本B'
assert re.findall(p_source, res, re.S) == ['\n百度新闻']

sub

import re


"""主要用于清洗正则表达式提取出的内容"""
title = '<!--s-text-->双十一点燃线下经济"小时达"服务成<em>阿里巴巴</em>增长新引擎<!--/s-text-->'
# 删除注释
assert re.sub(r'<.*?>', '', title) == '双十一点燃线下经济"小时达"服务成阿里巴巴增长新引擎'
company = "*华能信托"
# 中括号用于转义特殊符号
assert re.sub('[*]', '', company) == '华能信托'