第63天:正则表达式

正则表达式是一个特殊的字符串序列、一种模式,用来判断字符串是否符合这种模式,如:判断邮件地址是否有 @ 符号,判断手机号是否正确等待。

基本语法

在正则表达式中,可以使用 \d 匹配数字,\w 匹配数字和子母,. 可以匹配除了换行符之外的任意字符,\s 匹配空白字符

1\d 可以匹配 1213

a\w 可以匹配 abac

.abc 可以匹配 aabc~abcabc

上面是单个字符匹配,要匹配长字符串在正则表达式中,用 + 表示匹配至少一个字符,用 ? 表示匹配0或1个字符,用 {n} 表示匹配n个字符,用 {n,m} 表示匹配n-m个字符

test.+ 可以匹配 testPythontestPy,无法匹配 test

test? 可以匹配 testest,无法匹配 testPython

test.{6} 可以匹配 testPython,无法匹配 testPy

test.{1,6} 可以匹配 testPythontestPy,无法匹配 test

复杂的正则

正则表达式可以更加的复杂:([A-Za-z0-9_\-\.]+)\@([A-Za-z0-9_\-\.]+)\.([A-Za-z]{2,4})

( ):表示分组

[ ]:表示在[ ]内的任意一个字符

([A-Za-z0-9_-.]+):表示以大写字母 [A-Z]、小写字母 [a-z]、数字 [0-9]、下划线 [_]、减号 [-]、点号 [.] 中的至少一个字符 [+] ,在正则表达式中减号 [-] 和点号 [.] 是特殊字符需要使用 [] 转义

@:邮件中的@符号

([A-Za-z0-9_-.]+):表示以大写字母 [A-Z]、小写字母 [a-z]、数字 [0-9]、下划线 [_]、减号 [-]、点号 [.] 中的至少一个字符 [+],如:qq,sina

.([A-Za-z]{2,4}):表示以点号 [.] 连接2-4 [{2,4}] 个字符的大写字母 [A-Z] 和小写字母 [a-z]

([A-Za-z0-9_\-\.]+)\@([A-Za-z0-9_\-\.]+)\.([A-Za-z]{2,4})可以匹配 abc@qq.comABCabc1234@qq.comabc_123-xyz@sina.cn

Python中的正则表达式

匹配

在Python中提供了包含了所有正则表达式功能的 re 模块,用 re 中的match()函数判断是否匹配成功,如果匹配成功则返回 Match 对象,否则返回 None ,在 Python 中字符串用 \ 转义,使用 r 前缀可以不用考虑转义的问题

>>> import re>>> re.match(r'1\d', '13')<re.Match object; span=(0, 2), match='13'> # 匹配成功返回Match对象>>> re.match(r'1\d', '23') # 匹配失败返回None>>>

分组

在爬虫中一般需要提取出匹配成功的子字符串。用 ( ) 分组就可以提取出子字符串比如上面的邮件正则表达式,在Python中使用 Match 对象的 group() 函数提取出子字符串,groups() 函数返回所有子字符串的元组

([A-Za-z0-9_\-\.]+)\@([A-Za-z0-9_\-\.]+)\.([A-Za-z]{2,4}) 定义了3个组,可以提取出 @ 符之前的字符串和域名

>>> email = re.match(r'([A-Za-z0-9_\-\.]+)\@([A-Za-z0-9_\-\.]+)\.([A-Za-z]{2,4})', 'abc@qq.com')>>> email.group(0)'abc@qq.com'>>> email.group(1)'abc'>>> email.group(2)'qq'>>> email.group(3)'com'

group() 函数中group(0)永远是字符串本身,group(1)group(2)group(3) ...表示第一、第二、第三...个子字符串。

替换

re 模块中提供了 sub() 函数替换子字符串的内容

# 删除字符串中的空格>>> test = '021- 1101101 10'>>> re.sub(r'\s','',test)'021-110110110'

sub() 函数中被替换的字符串也可以使用函数

import re
# 把数字加上100def num(match): value = int(match.group('num')) return str(value + 100)
test = 'abc12defg980'result = re.sub(r'(?P<num>\d+)', num, test)print(result)

编译

在使用 re 模块的时候,Python 帮我们做了两件事:

  1. 编译正则表达式,如果正则表示不合法会报错
  2. 用编译后的正则表示匹配字符串

re 模块中可以使用 compile() 函数预编译正则表示

>>> import re>>> test = re.compile(r'test(.{1,6})')>>> test.match('testPy').groups()('Py',)>>> test.match('testPython').groups()('Python',)

compile() 函数构造出来的是一个 Pattern 对象。提供了一些属性读取正则表达的相关信息。

  1. pattern:编译的正则表达式
  2. groups:表达式中的分组数量
  3. flags:编译时的匹配模式
>>> test = re.compile(r'test(.{1,6})')>>> test.pattern'test(.{1,6})'>>> test.groups1>>> test.flags32

总结

正则表达式非常的强大,这里只介绍了它的一小部分内容,让大家对正则表达式的概念和使用有一个清晰的了解。

示例代码:https://github.com/JustDoPython/python-100-day/tree/master/day-063

系列文章

第62天:HTTP 入门
第61天:Python Requests 库高级用法
从 0 学习 Python 0 - 60 大合集总结
(0)

相关推荐

  • JS正则表达式完整版

    转自:https://blog.csdn.net/h610443955/article/details/81079439 目录 引言 第一章 正则表达式字符匹配攻略 1 两种模糊匹配 2. 字符组 3 ...

  • 正则表达式A - 方法及特殊字符用法

      课程大纲  1.正则表达式的概念及作用 2.正则表达式的创建方法 3.正则表达式的用法 正则表达式概念: 正则表达式是由普通字符及特殊字符组成的对字符串进行过滤的逻辑公式 正则表达式的创建方式: ...

  • 数据清洗 常用正则表达式大全

    数据挖掘全流程包括采集.清洗和分析.而清洗工作往往会占到数据挖掘的80%的工作量.比如,最常见的文本数据,计算机是无法分析文本数据的,我们需要从文本中抽取出需要的数据,并将其编码为数字.这个从文本中抽 ...

  • 正则表达式 – 语法 | 菜鸟教程

    正则表达式 - 语法 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件 ...

  • 正则表达式 – 教程 | 菜鸟教程

    正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"). 正则表达式使用单个字符串来描述.匹配一 ...

  • 中国63最,相当震撼啊,看到的人有福了!太精彩了!

    随着时代的进步, 中国越来越繁荣富强. 今天为大家盘点了中国之最, 带朋友们见识一下最强中国! 中国现存最大的古建筑群: 故宫 中国最大的城市广场: 天安门广场 中国现存海拔最高的宫殿: 布达拉宫 中 ...

  • 2021年5月9日《针灸大成》第63课学习心得

    文字仅是我本人对老师课程的理解,您可以直接拉到文末,收看老师的授课视频,祝您福慧双增! 治眼症与睛中法: 眼睛赤红肿痛,是湿热症,在攒竹.丝竹空.耳尖.太阳,点刺放血. 眼睛生翳: 近取穴:睛明.阳白 ...

  • Excel中的63号字符,你不会,活该你加班

    63号字符是啥,这个问题说来话长,所以咱就长话短说. 在计算机中,每个字符都有对应的数字代码表示.可以用char()函数获取数字所表示的字符,或者用code()函数获取字符对应的代码. 但是,code ...

  • 赵孟頫笔下的第一楷书!63岁写成,被誉为“古劲绝伦”

    赵孟頫笔下的第一楷书!63岁写成,被誉为"古劲绝伦" 2020-11-30 18:13:23 来源: 书法网             书法史上的楷书四大家,都是百世流芳的千古风流人 ...

  • UC头条:医生自制引火归元汤, 治疗80名舌痛症患者竟治好63名, 咋做到的?

    点击加载图片 导读:笑口常开研习社原创美文第410期 #非常病例#舌痛症,尽管多发生于中老年,且以女性居多,但最近几年其发生呈上升趋势,在口腔粘膜疾病已经为居第三位. 舌痛症的表现,以舌部为主要发病部 ...

  • 50道正则表达式笔试题参考答案(第11-20题)

    各位客官姥爷好,欢迎回来.我们在上节给出了前10道正则表达式练习题目和参考答案,相信各位姥爷都有对照着练习.在本节清风将给出第11-20题的参考答案. PS:在各位客官姥爷跟着清风一起完成本系列的练习 ...

  • 63年《革命历史歌曲表演唱》,难得一见

    经典60年代,<老军歌联唱>向老革命致敬,好听! 经典60年代,<老军歌联唱>向老革命致敬,好听! 展开