re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式。 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
例子:
import re
### 最常规的匹配
content = 'Hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match('^Hello\\s\\d\\d\\d\\s\\d{4}\\s\\w{10}.*Demo$', content)
print(result)
print(result.group())
print(result.span())
### 泛匹配
content = 'Hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match('^Hello\\s\\d\\d\\d\\s\\d{4}\\s\\w{10}.*Demo$', content)
print(result)
print(result.group())
print(result.span())
### 匹配目标
content = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match('^Hello.*Demo$', content)
print(result)
print(result.group())
print(result.span())
### 贪婪匹配
content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^Hello\\s(\\d+)\\sWorld.*Demo$', content)
print(result)
print(result.group(1))
print(result.span())
### 非贪婪匹配
content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\\d+).*Demo$', content)
print(result)
print(result.group(1))
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式。 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
例子:
import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.match('Hello.*?(\\d+).*?Demo', content)
print(result)
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.search('Hello.*?(\\d+).*?Demo', content)
print(result)
print(result.group(1))
总结:为匹配方便,能用search就不用match。
re.findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
参数 | 描述 |
---|---|
string | 待匹配的字符串。 |
pos | 可选参数,指定字符串的起始位置,默认为 0。 |
endpos | 可选参数,指定字符串的结束位置,默认为字符串的长度。 |
例子:
html = '''<div id=\"songs-list\">\n",
" <h2 class=\"title\">经典老歌</h2>\n",
" <p class=\"introduction\">\n",
" 经典老歌列表\n",
" </p>\n",
" <ul id=\"list\" class=\"list-group\">\n",
" <li data-view=\"2\">一路上有你</li>\n",
" <li data-view=\"7\">\n",
" <a href=\"/2.mp3\" singer=\"任贤齐\">沧海一声笑</a>\n",
" </li>\n",
" <li data-view=\"4\" class=\"active\">\n",
" <a href=\"/3.mp3\" singer=\"齐秦\">往事随风</a>\n",
" </li>\n",
" <li data-view=\"6\"><a href=\"/4.mp3\" singer=\"beyond\">光辉岁月</a></li>\n",
" <li data-view=\"5\"><a href=\"/5.mp3\" singer=\"陈慧琳\">记事本</a></li>\n",
" <li data-view=\"5\">\n",
" <a href=\"/6.mp3\" singer=\"邓丽君\">但愿人长久</a>\n",
" </li>\n",
" </ul>\n",
"</div>'''
result = re.search('<li.*?singer=\"(.*?)\">(.*?)</a>', html)
if result:
print(result.group(1), result.group(2))
results = re.findall('<li.*?href=\"(.*?)\".*?singer=\"(.*?)\">(.*?)</a>', html, re.S)
print(results)
print(type(results))
for result in results:
print(result)
print(result[0], result[1], result[2])
练习
import re
#链接 https://book.douban.com/
# 提取书名、图片、作者、发布日期、出版社
html = """<ul class="list-col list-col5 list-express slide-item">
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35687473/?icn=index-latestbook-subject" title="成为母亲的选择">
<img src="https://img2.doubanio.com/view/subject/s/public/s34067702.jpg" alt="成为母亲的选择">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35687473/?icn=index-latestbook-subject" title="成为母亲的选择">成为母亲的选择</a>
</div>
<div class="author">
[以]奥娜·多纳特
</div>
<div class="more-meta">
<h4 class="title">
成为母亲的选择
</h4>
<p>
<span class="author">
[以]奥娜·多纳特
</span>
/
<span class="year">
2022-2
</span>
/
<span class="publisher">
北京联合出版公司
</span>
</p>
<p class="abstract">
“如果能带着现在所拥有的认知和经验重返过去,你还会让自己成为母亲吗?”
历时五年、横跨三代母亲的权威调查 重新言说一份被视为“禁忌”的情感
以色列社会学家奥娜·多纳特话题之作 在德国、以色列等多国引起热烈讨论
“我们女性需要把世界掌握在我们手中,而不是随波逐流。我们女性需要主宰自己的身体和人生;也需要主宰自己的思想、感受和想象力。”
——————
编...
</p>
</div>
</div>
</li>
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35705035/?icn=index-latestbook-subject" title="木心遗稿">
<img src="https://img9.doubanio.com/view/subject/s/public/s34097454.jpg" alt="木心遗稿">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35705035/?icn=index-latestbook-subject" title="木心遗稿">木心遗稿</a>
</div>
<div class="author">
木心
</div>
<div class="more-meta">
<h4 class="title">
木心遗稿
</h4>
<p>
<span class="author">
木心
</span>
/
<span class="year">
2022-1
</span>
/
<span class="publisher">
理想国|上海三联书店
</span>
</p>
<p class="abstract">
弟子陈丹青说,他和我聊过的私房话,无遮无掩,进入遗稿……
在木心手稿里“重逢木心”,有一些文字你也只能在他的原始孤本里读到!
纪念木心逝世10周年 ,《木心遗稿》首次亮相,仅第1版第1刷赠有“木心笔迹珍藏卡”!
-
木心说,到了成名之日,我才眼睁睁地看着自己被埋没了。
晚年从美国返回故乡乌镇之前,他决定,不入画廊,不进拍卖行,不接待采访,不作讲演,不发表...
</p>
</div>
</div>
</li>
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35653981/?icn=index-latestbook-subject" title="请你安静些,好吗?">
<img src="https://img1.doubanio.com/view/subject/s/public/s34092789.jpg" alt="请你安静些,好吗?">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35653981/?icn=index-latestbook-subject" title="请你安静些,好吗?">请你安静些,好吗?</a>
</div>
<div class="author">
[美]雷蒙德·卡佛(Raymond Carver)
</div>
<div class="more-meta">
<h4 class="title">
请你安静些,好吗?
</h4>
<p>
<span class="author">
[美]雷蒙德·卡佛(Raymond Carver)
</span>
/
<span class="year">
2022-1
</span>
/
<span class="publisher">
南海出版公司
</span>
</p>
<p class="abstract">
★ 美国短篇小说大师 雷蒙德·卡佛 首部短篇集
★《怎么了?》《把你的脚放进我鞋子里试试》《你是医生吗?》获得欧·亨利短篇小说奖
★《请你安静些,好吗?》入选《美国最佳短篇小说选》,是我写作生涯中最重要的事件。——雷蒙德·卡佛
★内文全新校译
★克莱因蓝特种纸,专色银双封设计,随书附赠贴纸
我第一次偶然读到卡佛的小说,便认定为杰作。《请你安静些,好吗?...
</p>
</div>
</div>
</li>
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35743744/?icn=index-latestbook-subject" title="想念地坛">
<img src="https://img9.doubanio.com/view/subject/s/public/s34103675.jpg" alt="想念地坛">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35743744/?icn=index-latestbook-subject" title="想念地坛">想念地坛</a>
</div>
<div class="author">
史铁生
</div>
<div class="more-meta">
<h4 class="title">
想念地坛
</h4>
<p>
<span class="author">
史铁生
</span>
/
<span class="year">
2022-1
</span>
/
<span class="publisher">
天地出版社
</span>
</p>
<p class="abstract">
◎ 内容简介
《想念地坛》共分散文与随笔、中短篇小说、长篇小说三辑,收录了当代著名文学家史铁生写作生涯中各个时期不同种类的经典作品,既收入了《我与地坛》《我二十一岁那年》《病隙碎笔》等经典散文随笔名篇,又收入了《我的遥远的清平湾》《命若琴弦》《奶奶的星星》等经典中短篇小说代表作,还收入了长篇小说《务虚笔记》的节选。
这些作品,以作者的亲身经历...
</p>
</div>
</div>
</li>
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35694412/?icn=index-latestbook-subject" title="皮凯蒂之后">
<img src="https://img1.doubanio.com/view/subject/s/public/s34116109.jpg" alt="皮凯蒂之后">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35694412/?icn=index-latestbook-subject" title="皮凯蒂之后:经济学和不平等研究的未来">皮凯蒂之后:经济学和不平等研究的未来</a>
</div>
<div class="author">
[美]希瑟·布西 / [美]布拉德福德·德龙 / [美]马歇尔·斯坦鲍姆 编著
</div>
<div class="more-meta">
<h4 class="title">
皮凯蒂之后:经济学和不平等研究的未来
</h4>
<p>
<span class="author">
[美]希瑟·布西 / [美]布拉德福德·德龙 / [美]马歇尔·斯坦鲍姆 编著
</span>
/
<span class="year">
2022-1-6
</span>
/
<span class="publisher">
中信出版集团
</span>
</p>
<p class="abstract">
自托马斯·皮凯蒂的《21世纪资本论》出版后,收入分配和不平等成为热点话题,不仅引发了众多媒体的关注,更激起了学界的广泛争议。
本书汇集了经济学、法学、历史学、社会学、政治学等学科众多优秀学者的研究。这些学者从各自的研究领域出发,探讨了不平等的决定因素,剖析了《21世纪资本论》的重要意义及其不足。本书是一部既有历史跨度,又有视角广度,还有强烈现...
</p>
</div>
</div>
</li>
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35683277/?icn=index-latestbook-subject" title="通往父亲之路">
<img src="https://img9.doubanio.com/view/subject/s/public/s34077385.jpg" alt="通往父亲之路">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35683277/?icn=index-latestbook-subject" title="通往父亲之路">通往父亲之路</a>
</div>
<div class="author">
叶兆言
</div>
<div class="more-meta">
<h4 class="title">
通往父亲之路
</h4>
<p>
<span class="author">
叶兆言
</span>
/
<span class="year">
2022-1
</span>
/
<span class="publisher">
译林出版社
</span>
</p>
<p class="abstract">
【编辑推荐】
1.“这是我一直想写的一部书。”叶兆言全新作品,初次直面父辈的人生之书
本书为著名作家叶兆言以其六十余载生命体验,初次直面、致敬、反思父辈的人生之书。作为作家,叶兆言书写了近千万文字;但身为人子,他却从未在书中直面父辈这个人生话题。通往父亲的道路太漫长,这次,他卸下精神重负,坦言“这是我一直以来想写的一部书”,开启父子关系探讨的文...
</p>
</div>
</div>
</li>
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35668939/?icn=index-latestbook-subject" title="我们的未来">
<img src="https://img9.doubanio.com/view/subject/s/public/s34121205.jpg" alt="我们的未来">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35668939/?icn=index-latestbook-subject" title="我们的未来:数字社会乌托邦">我们的未来:数字社会乌托邦</a>
</div>
<div class="author">
[德]理查德·大卫·普雷希特
</div>
<div class="more-meta">
<h4 class="title">
我们的未来:数字社会乌托邦
</h4>
<p>
<span class="author">
[德]理查德·大卫·普雷希特
</span>
/
<span class="year">
2022-1
</span>
/
<span class="publisher">
商务印书馆
</span>
</p>
<p class="abstract">
科技的每一个进步带来舒适的同时,也压缩了我们的生活空间,导致个人数据被侵犯、交易。对此,有人对数字化的未来充满了天真;有人对硅谷数字公司的独裁发出警告;有人更愿意掩耳盗铃地回到过去。
本书描绘了一幅充满希望的数字化时代的未来图景,同时客观冷静分析了以牺牲反思判断力为代价的、充满刺激和欲望扩张的数字化发展过程对文化、道德和政治能力的威胁,批判...
</p>
</div>
</div>
</li>
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35731264/?icn=index-latestbook-subject" title="实用英汉哲学术语词典">
<img src="https://img9.doubanio.com/view/subject/s/public/s34121204.jpg" alt="实用英汉哲学术语词典">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35731264/?icn=index-latestbook-subject" title="实用英汉哲学术语词典">实用英汉哲学术语词典</a>
</div>
<div class="author">
鲁旭东
</div>
<div class="more-meta">
<h4 class="title">
实用英汉哲学术语词典
</h4>
<p>
<span class="author">
鲁旭东
</span>
/
<span class="year">
2022-1
</span>
/
<span class="publisher">
商务印书馆
</span>
</p>
<p class="abstract">
本书吸收了近年来国内外国哲学研究和翻译领域的诸多专家的成果以及国外的相关成果,由正编和副编组成。正编为哲学术语正文,以西方哲学为主,同时兼顾东方哲学;既收录了古典哲学的重要术语,也收录了近现代外国哲学和流派的常用词汇,内容涉及哲学的各个分支学科以及与哲学密切相关的领域。副编包括世界著名哲学家和思想家名录、国外哲学及人文科学杂志目录、国外哲...
</p>
</div>
</div>
</li>
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35740260/?icn=index-latestbook-subject" title="单于归来">
<img src="https://img2.doubanio.com/view/subject/s/public/s34121203.jpg" alt="单于归来">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35740260/?icn=index-latestbook-subject" title="单于归来:南匈奴文化遗存考察">单于归来:南匈奴文化遗存考察</a>
</div>
<div class="author">
刘勇
</div>
<div class="more-meta">
<h4 class="title">
单于归来:南匈奴文化遗存考察
</h4>
<p>
<span class="author">
刘勇
</span>
/
<span class="year">
2022-1-1
</span>
/
<span class="publisher">
山西人民出版社
</span>
</p>
<p class="abstract">
本书是作者多年来考察南匈奴历史文化遗存,田野考察与文献考证结合的一部专题文集。以山西南匈奴历史文化遗存为主体,集历史价值和可读性于一体。“游山西就是在读历史”,作者走访发现诸多南匈奴文化遗存,以田野考察与文献互证为基础,为了解中国民族融合的复杂过程,提供了重要个案。这些考察研究,对我们进一步深入、系统地了解南匈奴历史,提供了一个新的视角。...
</p>
</div>
</div>
</li>
<li>
<div class="cover">
<a href="https://book.douban.com/subject/35717298/?icn=index-latestbook-subject" title="重述张爱玲">
<img src="https://img2.doubanio.com/view/subject/s/public/s34079993.jpg" alt="重述张爱玲">
</a>
</div>
<div class="info">
<div class="title">
<a href="https://book.douban.com/subject/35717298/?icn=index-latestbook-subject" title="重述张爱玲:更新传记与《小团圆》公案">重述张爱玲:更新传记与《小团圆》公案</a>
</div>
<div class="author">
金宏达
</div>
<div class="more-meta">
<h4 class="title">
重述张爱玲:更新传记与《小团圆》公案
</h4>
<p>
<span class="author">
金宏达
</span>
/
<span class="year">
2022-1
</span>
/
<span class="publisher">
生活·读书·新知三联书店
</span>
</p>
<p class="abstract">
本书作者是资深张爱玲研究专家,一度最具影响力的《张爱玲文集》编者。近些年来,张爱玲诸多遗作和书信纷纷出版,其生平与传记材料的来源豁然拓宽,本书是张爱玲生平与创作研究一项具有突破性的最新成果,作者经过对已有大量资料的缜密研究,贴近事实,重理张爱玲生平,尤其是其后期经历与境况,揭示《小团圆》小说从成稿到被“拦截”再到被废弃,如何映照出张氏一段...
</p>
</div>
</div>
</li>
</ul>"""
data = re.findall('<li.*?cover.*?href="(.*?)".*?title="(.*?)".*?src="(.*?)".*?more-meta.*?author">(.*?)</span>.*?year">(.*?)</span>.*?publisher">(.*?)</span>',html,re.S)
for data in data:
print(data[0],data[1],str(data[2]).strip(),str(data[3]).strip(),str(data[4]).strip(),str(data[5]).strip())
正则表达式模式
模式字符串使用特殊的语法来表示一个正则表达式:
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。
下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。
模式 | 描述 |
---|---|
^ | 匹配字符串的开头 。 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 |
[…] | 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’。 |
[^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
* | 匹配0个或多个的表达式。 |
+ | 匹配1个或多个的表达式。 |
? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式。 |
{ n} | 精确匹配 n 个前面表达式。例如, o{2} 不能匹配 “Bob” 中的 “o”,但是能匹配 “food” 中的两个 o。 |
{ n,} | 匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。“o{1,}” 等价于 “o+”。“o{0,}” 则等价于 “o*”。 |
{ n,m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式。 |
a | b |
() | 对正则表达式分组并记住匹配的文本。 |
(?imx) | 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。 |
(?-imx) | 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。 |
(?: ) | 类似 (…), 但是不表示一个组。 |
(?imx: ) | 在括号中使用i, m, 或 x 可选标志。 |
(?-imx: ) | 在括号中不使用i, m, 或 x 可选标志 。 |
(?#…) | 注释. 。 |
(?= re) | 前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 |
(?! re) | 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功 。 |
(?> re) | 匹配的独立模式,省去回溯 。 |
\w | 匹配字母数字及下划线 。 |
\W | 匹配非字母数字及下划线 。 |
\s | 匹配任意空白字符,等价于 [ \t\n\r\f]。 |
\S | 匹配任意非空字符 。 |
\d | 匹配任意数字,等价于 [0-9]。 |
\D | 匹配任意非数字。 |
\A | 匹配字符串开始 。 |
\Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。 |
\z | 匹配字符串结束 。 |
\G | 匹配最后匹配完成的位置。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。 |
\B | 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。 |
\n, \t, 等. | 匹配一个换行符。匹配一个制表符。等 |
\1…\9 | 匹配第n个分组的内容。 |
\10 | 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。 |