学习笔记 -- python 正则表达式解析

一、引言

什么是正则表达式?参考链接https://www.runoob.com/regexp/regexp-intro.htmlhttps://www.runoob.com/regexp/regexp-intro.html作者总结两个关键词:灵活、匹配

为什么要用正则表达式?

可以看看这哥们写的例子

二、实例解析 

实例来源菜鸟教程

#!/usr/bin/python3
import re
 
line = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
 
if matchObj:
   print ("matchObj.group() : ", matchObj.group())
   print ("matchObj.group(1) : ", matchObj.group(1))
   print ("matchObj.group(2) : ", matchObj.group(2))
else:
   print ("No match!!")

正则表达式如下:

r'(.*) are (.*?) .*'

re.match 为起始位置匹配模式

re.M|re.I  为正则表达式修饰符 - 可选标志,满足大小写、多行匹配

(.*?) 为正则表达式模式  其中 () 为一组;除换行符外的任意字符;* 匹配0个和多个表达式;? 非贪婪方式。

group 提取分组匹配到的字符串,group()和group(0) 为正则表达式整体匹配结果;group(1)为匹配第一组括号内表达式的结果;以此类推。

三、控制变量法分析正则表达式

r'(.*) are (.*?) .*' 输出如下:

matchObj.group() :  Cats are smarter than dogs
matchObj.group(0) :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

r'(.*) are (.*?) .'  输出如下:

matchObj.group() :  Cats are smarter t
matchObj.group(0) :  Cats are smarter t
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

r'(.*) are (.*?) ' 输出如下:

matchObj.group() :  Cats are smarter 
matchObj.group(0) :  Cats are smarter 
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

r'(.*) are (.*?)' 输出如下:

matchObj.group() :  Cats are 
matchObj.group(0) :  Cats are 
matchObj.group(1) :  Cats
matchObj.group(2) :  

r'(.*) are ' 输出如下:

matchObj.group() :  Cats are 
matchObj.group(0) :  Cats are 
matchObj.group(1) :  Cats

r'(.*) are' 输出如下:

matchObj.group() :  Cats are
matchObj.group(0) :  Cats are
matchObj.group(1) :  Cats

r'(.*) ' 输出如下:

matchObj.group() :  Cats are smarter than 
matchObj.group(0) :  Cats are smarter than 
matchObj.group(1) :  Cats are smarter than

r'(.*)' 输出如下:

matchObj.group() :  Cats are smarter than dogs
matchObj.group(0) :  Cats are smarter than dogs
matchObj.group(1) :  Cats are smarter than dogs

r'.*' 输出如下:

matchObj.group() :  Cats are smarter than dogs
matchObj.group(0) :  Cats are smarter than dogs

r'.' 输出如下:

matchObj.group() :  C
matchObj.group(0) :  C

综上值得注意的是,空格 也是匹配的内容和对象,直接影响整个匹配结果。前面提到“re.match 为起始位置匹配模式”所以起始位字符稍有不匹配情况,将直接返回none。一开始去理解re.match匹配模式在应用中相当不合理,所以建议使用re.search来匹配整个字符串。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值