re/python3基本使用

match,group

match重开头匹配

In [4]: print(string)
<link rel="alternate" href="https://mya.wordpress.org/" hreflang="mya" />
<link rel="alternate" href="https://nb.wordpress.org/" hreflang="nb" />
<link rel="alternate" href="https://ne.wordpress.org/" hreflang="ne" />
<link rel="alternate" href="https://nl.wordpress.org/" hreflang="nl" />
<link rel="alternate" href="https://nl-be.wordpress.org/" hreflang="nl-be" />
<link rel="alternate" href="https://nn.wordpress.org/" hreflang="nn" />
<link rel="alternate" href="https://oci.wordpress.org/" hreflang="oci" />
<link rel="alternate" href="https://ory.wordpress.org/" hreflang="ory" />
<link rel="alternate" href="https://os.wordpress.org/" hreflang="os" />
<link rel="alternate" href="https://pan.wordpress.org/" hreflang="pa" />
<link rel="alternate" href="https://pl.wordpress.org/" hreflang="pl" />
<link rel="alternate" href="https://ps.wordpress.org/" hreflang="ps" />
# ?非贪婪模式
In [7]: result = re.match(r'^.*?https://(.*?)/".*', string)
# group()返回整个匹配
In [8]: result.group()
Out[8]: '<link rel="alternate" href="https://mya.wordpress.org/" hreflang="mya" />'
# group(1)返回匹配第一个小括号的值
In [9]: result.group(1)
Out[9]: 'mya.wordpress.org'

匹配模式

# .不能匹配换行符
In [10]: result = re.match(r'^.*?https://(.*?)/".*ps"\s/>', string)

In [11]: result

In [12]: print(result)
None
# 添加re.S匹配模式,就可以使.匹配换行符
In [13]: result = re.match(r'^.*?https://(.*?)/".*ps"\s/>', string, re.S)

In [14]: print(result)
<re.Match object; span=(0, 876), match='<link rel="alternate" href="https://mya.wordpress>

re.search

搜索整个文本返回一个

In [15]: result = re.search(r'https://(.*?)/"', string)

In [16]: result.group()
Out[16]: 'https://mya.wordpress.org/"'

In [17]: result.group(1)
Out[17]: 'mya.wordpress.org'

re.findall

所有匹配的结果

In [22]: result = re.findall(r'https://(.*?)/.*?hreflang="(\w+)"', string)

In [23]: result
Out[23]:
[('mya.wordpress.org', 'mya'),
 ('nb.wordpress.org', 'nb'),
 ('ne.wordpress.org', 'ne'),
 ('nl.wordpress.org', 'nl'),
 ('nn.wordpress.org', 'nn'),
 ('oci.wordpress.org', 'oci'),
 ('ory.wordpress.org', 'ory'),
 ('os.wordpress.org', 'os'),
 ('pan.wordpress.org', 'pa'),
 ('pl.wordpress.org', 'pl'),
 ('ps.wordpress.org', 'ps')]

re.sub

替换掉匹配的字符, 可以用来清洗不规则字符串

In [40]: result = re.sub(r'https://.*?\.org/', 'www.baidu.com', string)

In [41]: print(result)
<link rel="alternate" href="www.baidu.com" hreflang="mya" />
<link rel="alternate" href="www.baidu.com" hreflang="nb" />
<link rel="alternate" href="www.baidu.com" hreflang="ne" />
<link rel="alternate" href="www.baidu.com" hreflang="nl" />
<link rel="alternate" href="www.baidu.com" hreflang="nl-be" />
<link rel="alternate" href="www.baidu.com" hreflang="nn" />
<link rel="alternate" href="www.baidu.com" hreflang="oci" />
<link rel="alternate" href="www.baidu.com" hreflang="ory" />
<link rel="alternate" href="www.baidu.com" hreflang="os" />
<link rel="alternate" href="www.baidu.com" hreflang="pa" />
<link rel="alternate" href="www.baidu.com" hreflang="pl" />
<link rel="alternate" href="www.baidu.com" hreflang="ps" />
# \1就是前一个括号匹配的内容,再次使用
In [44]: result = re.sub(r'(https://.*?)\.org/', r'\1.cn', string)

In [47]: print(result)
<link rel="alternate" href="https://mya.wordpress.cn" hreflang="mya" />
<link rel="alternate" href="https://nb.wordpress.cn" hreflang="nb" />
<link rel="alternate" href="https://ne.wordpress.cn" hreflang="ne" />
<link rel="alternate" href="https://nl.wordpress.cn" hreflang="nl" />
<link rel="alternate" href="https://nl-be.wordpress.cn" hreflang="nl-be" />
<link rel="alternate" href="https://nn.wordpress.cn" hreflang="nn" />
<link rel="alternate" href="https://oci.wordpress.cn" hreflang="oci" />
<link rel="alternate" href="https://ory.wordpress.cn" hreflang="ory" />
<link rel="alternate" href="https://os.wordpress.cn" hreflang="os" />
<link rel="alternate" href="https://pan.wordpress.cn" hreflang="pa" />
<link rel="alternate" href="https://pl.wordpress.cn" hreflang="pl" />
<link rel="alternate" href="https://ps.wordpress.cn" hreflang="ps" />

re.compile

匹配对象

content = """

                
                <li data-rid="1">
                <div class="book-img-box">
                    <a href="//book.qidian.com/info/1010734492" data-bid="1010734492" data-eid="qd_B57" target="_blank"><img src="//bookcover.yuewen.com/qdbimg/349573/1010734492/150"></a>
                </div>
                <div class="book-mid-info">
                    <h4><a href="//book.qidian.com/info/1010734492" target="_blank" data-eid="qd_B58" data-bid="1010734492">凡人修仙之仙界篇</a></h4>
                    <p class="author">
                        <img src="//qidian.gtimg.com/qd/images/ico/user.f22d3.png"><a class="name" href="//my.qidian.com/author/4362771" data-eid="qd_B59" target="_blank">忘语</a><em>|</em><a href="//www.qidian.com/xianxia" target="_blank" data-eid="qd_B60">仙侠</a><i>&#183;</i><a class="go-sub-type" data-typeid="22" data-subtypeid="207" href="javascript:" data-eid="qd_B61">神话修真</a><em>|</em><span >连载中</span>
                        
                    </p>
                    <p class="intro">
                        凡人修仙,风云再起时空穿梭,轮回逆转金仙太乙,大罗道祖三千大道,法则至尊《凡人修仙传》仙界篇,一个韩立叱咤仙界的故事,一个凡人小子修仙的不灭传说。特说明下,没有看过前传的书友,并不影响本书的阅读体验,
                    </p>
                    <p class="update"><span ><style>@font-face { font-family: MHtuPQQy; src: url('https://qidian.gtimg.com/qd_anti_spider/MHtuPQQy.eot?') format('eot'); src: url('https://qidian.gtimg.com/qd_anti_spider/MHtuPQQy.woff') format('woff'), url('https://qidian.gtimg.com/qd_anti_spider/MHtuPQQy.ttf') format('truetype'); } .MHtuPQQy { font-family: 'MHtuPQQy' !important;     display: initial !important; color: inherit !important; vertical-align: initial !important; }</style><span class="MHtuPQQy">&#100150;&#100144;&#100146;&#100152;&#100141;&#100151;</span>万字</span>
                        
                    </p>
                </div>
                </li>
.....
    
"""
In [58]: pattern = re.compile(r'">(.*)</a></h4>')

In [59]: result = re.findall(pattern, content)

In [60]: result
Out[60]: ['凡人修仙之仙界篇', '圣墟', '诡秘之主', '修真聊天群', '大王饶命', '牧神记', '大医凌然', '太初', '明朝败家子',
'汉乡']

实战

In [17]: response = requests.get('https://www.qidian.com/all')

In [41]: pattern = re.compile('<li.*?<h4><.*?>([\u4e00-\u9fa5]+)</a></h4>.*?<img.*?<a.*?">([\u4e00-\u9fa5]+)</a><em>.*?<p class="intro">\s+(.*?)</p>', re.S)

In [43]: len(re.findall(pattern,response.text))
Out[43]: 20

In [44]: results = re.findall(pattern,response.text)

In [47]: for title, author, description in results:
    ...:     title = re.sub('\s*', '', title)
    ...:     author = re.sub('\s*', "", author)
    ...:     description = re.sub('\s*', "", description)
    ...:     print("[+]", title, author, description)
    ...:
[+] 凡人修仙之仙界篇 忘语 凡人修仙,风云再起时空穿梭,轮回逆转金仙太乙,大罗道祖三千大道,法则至尊《凡人修仙传》仙界篇,
一个韩立叱咤仙界的故事,一个凡人小子修仙的不灭传说。特说明下,没有看过前传的书友,并不影响本书的阅读体验,
[+] 圣墟 辰东 在破败中崛起,在寂灭中复苏。沧海成尘,雷电枯竭,那一缕幽雾又一次临近大地,世间的枷锁被打开了,一个全新的世
界就此揭开神秘的一角……
[+] 诡秘之主 爱潜水的乌贼 蒸汽与机械的浪潮中,谁能触及非凡?历史和黑暗的迷雾里,又是谁在耳语?我从诡秘中醒来,睁眼看见这
个世界:枪械,大炮,巨舰,飞空艇,差分机;魔药,占卜,诅咒,倒吊人,封印物……光明依旧照耀,神秘从未远离,
[+] 修真聊天群 圣骑士的传说 某天,宋书航意外加入了一个仙侠中二病资深患者的交流群,里面的群友们都以‘道友’相称,群名片都
是各种府主、洞主、真人、天师。连群主走失的宠物犬都称为大妖犬离家出走。整天聊的是炼丹、闯秘境、炼功经验啥的。
[+] 大王饶命 会说话的肘子 高中生吕树在一场车祸中改变人生,当灵气复苏时代来袭,他要做这时代的领跑者。物竞天择,胜者为王。
……全订验证群号:696087569
[+] 牧神记 宅猪 大墟的祖训说,天黑,别出门。大墟残老村的老弱病残们从江边捡到了一个婴儿,取名秦牧,含辛茹苦将他养大。这一
天夜幕降临,黑暗笼罩大墟,秦牧走出了家门……做个春风中荡漾的反派吧!瞎子对他说。秦牧的反派之路,
[+] 大医凌然 志鸟村 医学院学生凌然有一个小目标,要成为世界上最伟大的医生,结果不小心实现了。
[+] 太初 高楼大厦 一树生的万朵花,天下道门是一家。法术千般变化,人心却亘古不变
[+] 明朝败家子 上山打老虎额 弘治十一年。这是一个美好的清晨。此时朱厚照初成年。此时王守仁和唐伯虎磨刀霍霍,预备科举。此时
小冰河期已经来临,绵长的严寒肆虐着大地。此时在南和伯府里,地主家的傻儿子,南和伯的嫡传继承人方继藩……开始了
[+] 汉乡 架空历史 我们接受了祖先的遗产,这让中华辉煌了数千年,我们是如此的心安理得,从未想过要回归那个在刀耕火种中苦苦寻
找出路的时代。反哺我们苦难的祖先,并从中找到故乡的真正意义,将是本书要讲的故事。
[+] 深夜书屋 纯洁滴小龙 一家只在深夜开门营业的书屋,欢迎您的光临。————————《舵主群》:587980337(进群粉丝值验证
)《读书群》:523978007(无需验证)《战斗群》:457654443(无需验证)
[+] 超神机械师 齐佩甲 韩萧,《星海》骨灰级代练,被来自东(zuo)方(zhe)的神秘力量扔进穿越大军,携带玩家面板变成NPC,回到
《星海》公测之前,毅然选择难度最高的机械系。战舰列队纵横星海,星辰机甲夭矫如龙,幽能炮毁天灭
[+] 全球高武 老鹰吃小鸡 武者的世界~简介无力,被迫修改(一群群号555700424已满,二群群号931250725)
[+] 恶魔就在身边 汉宝 陈曌能召唤恶魔,能够看到死亡。“别西卜,用你暴食者的能力,为这位客户治疗一下厌食症。”“雷蒙,这位
老年人想重新获得男性的能力,你懂的。”“老黑,你和我说实话,这人什么时候死,怎么死……什么?你不知道,
[+] 修炼狂潮 傅啸尘 这是一个科学与武道并重的时代,大灾变之后,人类发现了超古代修炼文明,开启了一个大修炼时代,并开始了昆
仑界的殖民之路!这是一个人类危机重重,同时也是一个热血沸腾的,强者辈出的时代!得到了超古代文明强者丹
[+] 飞剑问道 我吃西红柿 在这个世界,有狐仙、河神、水怪、大妖,也有求长生的修行者。修行者们,开法眼,可看妖魔鬼怪。炼一口
飞剑,可千里杀敌。千里眼、顺风耳,更可探查四方。……秦府二公子‘秦云’,便是一位修行者……
[+] 三寸人间 耳根 举头三尺无神明,掌心三寸是人间。这是耳根继《仙逆》《求魔》《我欲封天》《一念永恒》后,创作的第五部长篇
小说《三寸人间》。
[+] 学霸的黑科技系统 超级科技 “系统,积分能兑钱吗?”“不能。”“干,那我要你何用!”“本系统能让你当上学爸,全人类爸爸
的爸,你还要钱有什么用?”
[+] 黎明之剑 远瞳 高文穿越了,但穿越的时候稍微出了点问题。在某个异界大陆上空飘了十几万年之后,他觉得自己可能需要一具身体
才算是成为一个完整的穿越者,但他并没想到自己好不容易成功之后竟然还需要带着这具身体从棺材里爬出来,
[+] 秦吏 七月新番 战国之末,华夏千年未有之大变局。有人天生世卿。有人贵为公子。他却重生成秦国小卒黑夫,云梦秦简中的小人物
。为免死于沟壑,为掌握自己命运,他奋力向上攀爬。好在,他赶上了一个大时代。六王毕,四海一!千年血统

参考文档:https://docs.python.org/3/library/re.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容