python正则表达式的学习

正则表达式

正则表达式
--通用的字符串表达工具

正则表达式的使用
编译:将符合正则表达式语法的字符串转换成正则表达式特征
正则表达式  →(编译 p=re.complie(regex))→   特征   
可认为编译后的特征与一组字符串是对应的
编译前的正则表达式只是符合正则表达式语法的一个字符串

规则图

 一. 正则表达式的表示类型

re库采用raw string类型表达正则表达式, 表示为: r'text'
例如: r'[1-9]\d{5}'
raw string 是不包含转义符('\')的字符串

二.Re库的主要功能函数 

函数说明
re.search()在一个字符串中搜索匹配正则表达式的第一个位置, 返回match对象
re.match()从一个字符串的开始位置起匹配正则表达式, 返回match对象
re.findall()

搜索字符串, 以列表类型返回全部能匹配的子串

re.split()将一个字符串按照正则表达式匹配结果进行分割, 返回列表类型
re.finditer()搜索字符串, 返回一个匹配结果的迭代类型, 每个迭代元素是match对象
re.sub()

在一个字符串中替换所有匹配正则表达式的子串, 返回替换后的字符串

① match=re.search(pattern,string, flags=0) 

  • 在一个字符串中搜索匹配正则表达式的第一个位置, 返回match对象.
    • pattern: 正则表达式的字符串或原生字符串表示
    • string: 待匹配字符串
    • flags: 正则表达式使用时的控制标记
常用标记说明
re.I re.IGNORECASE忽略正则表达的大小写, [A-Z]能够匹配小写字符
re.M re.MULTILINE

正则表达式中的^操作符能够将给定字符串的每行当作匹配开始

re.S

re.DOTALL

正则表达式中的.操作符能够匹配所有字符, 默认匹配除换行外的所有字符

example:

 

对返回match变量进行使用前,先用if语句进行判断。  

match只有从头开始匹配匹配到了才算匹配成功。

② list=re.split(pattern, string)

 

③ re.split(pattern, string, maxsplit=0, flags=0)  

  • 将一个字符串按照正则表达式匹配结果进行分割, 返回列表类型.
    • pattern: 正则表达式的字符串或原生字符串表示
    • string: 待匹配字符串
    • maxsplit: 最大分割数, 剩余部分作为最后一个元素输出
    • flags: 正则表达式使用时的控制标记

example:

④ match=re.finditer(pattern, string, flags) 

⑤ re.sub(pattern, repl, string, count=0, flags=0)

  • 在一个字符串中替换所有匹配正则表达式的子串, 返回替换后的字符串
    • pattern: 正则表达式的字符串或原生字符串表示
    • repl: 替换匹配字符串的字符串
    • string: 待匹配字符串
    • count: 匹配的最大替换次数
    • flags: 正则表达式使用时的控制标记

 

****** 

re.compile(pattern, flags=0)

  • 将正则表达式的字符串形式编译成正则表达式对象
    • pattern: 正则表达式的字符串或原生字符串表示
    • flags: 正则表达式使用时的控制标记

函数式用法: 一次性操作:

match = re.search(r'[1-9]\d{5}', 'BIS 100081')

等价于

面向对象用法: 编译后的多次操作:

pat = re.compile(r'[1-9]\d{5}')
match = pat.search('BiS 100081') 

三.Match对象 

① Match对象的属性

属性说明
.string

待匹配的文本

.re匹配时使用的pattern对象(正则表达式)
.pos正则表达式搜索文本的开始位置
.endpos正则表达式搜索文本的结束位置

② Match对象的方法 

方法说明
.group(0)获得匹配后的字符串
.start()匹配字符串在原始字符串的开始位置
.end()匹配字符串在原始字符串的结束位置
.span()返回(.start(), .end())

四.贪婪匹配 

Re库默认采用贪婪匹配, 即输出匹配最长的子串

如何变成最小匹配

操作符说明
*?前一个字符0次或无限次扩展,最小匹配
+?前一个字符1次或无限次扩展, 最小匹配
??

前一个字符0次或1次扩展, 最小匹配

{m,n}?扩展前一个字符m至n次(含n), 最小匹配

 五.group与groups的用法

  • group()查看正则式所匹配内容
  • group(1)查看正则式中第一个括号里面的内容 , group() 里面的参数是从1开始的, 不是0
>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0)       # The entire match 整个匹配
'Isaac Newton'
>>> m.group(1)       # The first parenthesized subgroup. 第一个括号分隔的子群
'Isaac'
>>> m.group(2)       # The second parenthesized subgroup. 第二个括号分隔的子群
'Newton'
>>> m.group(1, 2)    # Multiple arguments give us a tuple. 多个参数给我们一个元组
('Isaac', 'Newton')

groups()将正则式中所有括号里面的内容组成一个tuple,提取字符串要用切片的方法result.groups()[0] 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值