回顾:
什么是正则表达式:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符,及这些字符的特定组合,组合成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。
我们的正则系列都用python来做练习,正则非python独有,python中re模块实现了正则。

re.match

re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match就返回none
该方法有3个参数,第一个就是你写的正则表达式,第二个匹配的目标字符串,第三个是一个匹配模式
re.match(pattern,string,flags=0)

  • 最常规的匹配
import recontent = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match('^Hello\s\d\d\d\s\d{4}\s\w{10}.*Demo$',content)
#^符号匹配字符串开头,Hello开头的字符串写过来,
#\s匹配任意的空白字符的,\d可以匹配任意的数字的
#后面有4567,写4个\d太麻烦了,d{4}
#\w匹配字母或者下划线
#后面一长串字符不想写了。直接用.来全部代替,匹配任意字符
#* 匹配0个或多个表达式
#也就是.*可以匹配任意的字符除了换行符
#用Demo$制定正则表达式的结尾
print(len(content))
print(result)
print(result.group())#返回匹配结果
print(result.span())#输出返回结果的范围

结果:
41
<_sre.SRE_Match object; span=(0, 41), match=‘Hello 123 4567 World_This is a Regex Demo’>
Hello 123 4567 World_This is a Regex Demo
(0, 41)

#这种也行
result1 =  re.match('Hello\s\d{3}\s\d+\s\w{10}.*Demo$',content)
print(result1.group())

结果:
Hello 123 4567 World_This is a Regex Demo

  • 泛匹配
#为了匹配方便,通常用.*来写我们的匹配方式
import re
content = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match('^Hello.*Demo$',content)
print(result.group())
print(result.span)

结果:
Hello 123 4567 World_This is a Regex Demo
<built-in method span of _sre.SRE_Match object at 0x0000027519F36370>

  • 获取匹配目标
    我们可以把目标括起来,指定左端点,右端点
#看下如何获取匹配目标,下面的字符串我们想获取1234567
import recontent = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^Hello\s(\d+)\sWorld.*Demo$',content)
print(result)
print(result.group())
print(result.group(1))#上面第一个d加了括号,把第一个括号里的内容取出来
print(result.span())
#如果正则表达式中出现了括号,那么第一个括号里面的内容是group(1),第二是group(2)

结果:
<_sre.SRE_Match object; span=(0, 40), match=‘Hello 1234567 World_This is a Regex Demo’>
Hello 1234567 World_This is a Regex Demo
1234567
(0, 40)

  • 贪婪匹配
import recontent = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\d+).*Demo$',content)
#开头直接不写全了,就^He后面直接.*
#我们的目标用括号括起来
print(result)
print(result.group(1))#打印结果不是1234567,而是7,也就是说.*会尽可能多的匹配,把123456都匹配进去了,\d+至少会有一个

结果:
<_sre.SRE_Match object; span=(0, 40), match=‘Hello 1234567 World_This is a Regex Demo’>
7

  • 非贪婪匹配
import recontent = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*?(\d+).*Demo$',content)
print(result)
print(result.group(1))
#加个问号就是非贪婪匹配模式
#.*?就是尽可能少的匹配,后面一旦出现\d,它就会匹配数字

结果:
<_sre.SRE_Match object; span=(0, 40), match=‘Hello 1234567 World_This is a Regex Demo’>
1234567

  • 匹配模式
import recontent = '''Hello 1234567 World_This
is a Regex Demo'''
# print(content)
# result = re.match('^He.*?(\d+).*?Demo$',content)
# print(result)#为什么打印出来none,是因为后面的.是不能匹配换行符的
result = re.match('^He.*?(\d+).*Demo$',content,re.S)
print(result)
print(result.group(1))

结果:
<_sre.SRE_Match object; span=(0, 41), match=‘Hello 1234567 World_This \nis a Regex Demo’>
1234567

  • 转义
import recontent = 'price is $5.00'#这个字符串里面有特殊字符,如何匹配,$和.
result = re.match('price is $5.00',content)
print(result)#打印匹配结果 匹配字符串中有特殊字符时候,正则表达式里写特殊字符是不行的。

结果:
None

#我们可以用反斜杠来代替
import recontent = 'price is $5.00'#这个字符串里面有特殊字符,如何匹配$和. 用反斜杠\去转义字符
result = re.match('(price is \$5\.00)',content)#加括号是为了得到匹配目标因为加了括号就可以用result.group()
print(result.group(1))

结果:
price is $5.00

总结:

尽量使用泛匹配,使用括号得到匹配目标,尽量使用非贪婪模式,贪婪模式很可能使得我们匹配的目标少一些字符。 有换行符用re.S,因为html中有很多换行符。
缺点:这个match是要从头开始匹配,看下面的例子,就是说re.match中不是第一个字符开始,就不方便匹配

import recontent = 'price is $5.00'
result = re.match('rice is \$5\.00',content)
print(result)

None

正则系列1: re.match用法相关推荐

  1. python中使用requests库获取昵图网图片,且正则中re.S的用法

    python中使用requests库获取图片,且正则表达式中re.S的用法以及r.text和r.content的区别和搜索关键词 这里我获取的是昵图网的图片 代码附上 这里我获取的是2020的图片 i ...

  2. 正则系列2: re.search用法

    re.search re.search扫描整个字符串并返回第一个成功的匹配. 该方法有3个参数,第一个就是你写的正则表达式,第二个匹配的目标字符串,第三个是一个匹配模式 re.search(patte ...

  3. 正则简介re.match用法

    python中字符串前面加上r表示原生字符串 与大多数编程语言相同,正则表达式 比如复制的路径都是\,但是Python支持识别/.要么用replace替换要么就在这个字符串前面加个r 在python正 ...

  4. 正则系列4: re.sub用法

    re.sub 替换字符串中每一个匹配的字串后返回替换后的字符串 该方法主要用的三个参数,第一个参数是匹配模式即正则表达式,也是你要替换的原字符串部分.第二个参数是你需要替换成的字符串.第三个参数是原字 ...

  5. Go基础系列:双层channel用法示例

    Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 双层通道的解释见Go的双层通道 ...

  6. js正则表达exec和match的区别(转)

    转自:http://blog.csdn.net/fushou/article/details/6934608 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多, ...

  7. C#正则的委托和lambda表达式用法

    前面说到过正则表达式中使用委托的做法:MatchEvaluator,见此 这是最标准的写法:自定义一个函数,然后用此函数委托作为参数实例化MatchEvaluator对象,最后在正则匹配的时候可以用此 ...

  8. 正则系列——正则虐我千百遍,我要反抗了

    场景1:验证email是否合法 邮箱种类太多太多,什么net后缀,特殊的我们不做处理,下面我找了常用的一些邮箱: hyy@gmail.com 谷歌邮箱 hyy12@qq.com qq邮箱 hyy-12 ...

  9. re.match()用法详解

    re.match():包含有关搜索和结果信息的对象.如果没有匹配,则返回值 None,而不是 Match 对象.从第一个开始匹配. 示例代码: import res = "Long live ...

  10. java正则hitend,Java Matcher hitEnd()用法及代码示例

    Matcher类的hitEnd()方法用于检查此匹配器上的模式匹配是否已停止.当在匹配器中找不到更多匹配的组时,匹配结束.此方法返回一个声明相同的布尔值. 用法: public boolean hit ...

最新文章

  1. R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(配置显示的分组)实战(dot plot)
  2. R语言连接MySQL报错:could not run statement: The used command is not allowed with this MySQL version
  3. 随笔-tomcat的日志文件按日期每天生成
  4. 2Python全栈之路系列之基于socket实现聊天机器人
  5. Boost:python与宏BOOST_TEST_EQ相关的实例
  6. php jsonp 设置,php 输出 jsonp
  7. element-ui 使用table控件绑定的list数据的坑
  8. 如何让html重点表单自动对齐,html – 如何对齐多个表单元素?
  9. 陌屿授权系统v2.0源码
  10. java io .log_namenode无法启动:java.io.FileNotFoundException: .log (Permission denied)
  11. 详解:离线项目二 每个区域下最受欢迎的产品TOPN
  12. 台式机安装黑苹果-新手教程
  13. python定时任务_Python 定时任务的实现方式
  14. 如何通过官方原版win10PE安装纯净版win10系统
  15. 施一公:如何成为一名优秀的博士生?
  16. 高德地图哪个语音包最好_贪玩蓝月语音包 高德地图语音包哪个好
  17. 利用梆梆加固逻辑漏洞取巧脱壳
  18. 问题解决:shared_ptr Assertion px != 0 failed 及debug经验分享
  19. PC端微信多开bat命令
  20. 误发邮件如何能撤回?

热门文章

  1. 穿越东西冲、感受户外、爱上运动
  2. UE4 UI界面的层级切换
  3. 短信API接口怎么调用
  4. matlab imcrop 细节分析
  5. 爬取TAPTAP游戏应用榜单
  6. 无法退休的董小姐?董明珠继任格力董事长
  7. 【Mac 教程系列第 8 篇】Mac 更换锁屏时的头像
  8. Hive-003安装配置
  9. ios 改变图片尺寸_iOS 修改图片尺寸的方法
  10. arduino uno连接超声波传感器测距