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百度新闻']