python正则表达式

Posted tcctw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python正则表达式相关的知识,希望对你有一定的参考价值。

python正则表达式的用途不过多赘述

python正则表达式的实现主要是通过python的re库,re库是python的标准库,所以无须安装

1.正则表达式的常用操作符

操作符 说明 实例
. 表示任何单个字符  
[ ] 字符集,对单个字符给出取值范围

[abc]表示a、b、c,[a‐z]表示a到z单个字符

[^ ] 非字符集,对单个字符给出排除范围

[^abc]表示非a或b或c的单个字符

* 前一个字符0次或无限次扩展

abc* 表示ab、abc、abcc、abccc等

+ 前一个字符1次或无限次扩展

abc+ 表示abc、abcc、abccc等

? 前一个字符0次或1次扩展

abc? 表示ab、abc

| 左右表达式任意一个 abc|def表示abc、def
{m} 扩展前一个字符m次

ab{2}c表示abbc

{m,n} 扩展前一个字符m至n次(含n)

ab{1,2}c表示abc、abbc

^ 匹配字符串开头

^abc表示abc且在一个字符串的开头

$ 匹配字符串结尾

abc$表示abc且在一个字符串的结尾

( ) 分组标记,内部只能使用| 操作符

(abc)表示abc,(abc|def)表示abc、def

d

数字,等价于[0‐9]

 
w 单词字符,等价于[A‐Za‐z0‐9_]  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.re库的使用

主要功能函数

函数 说明
re.search()

在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象

re.match()

从一个字符串的开始位置起匹配正则表达式,返回match对象

re.findall()

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

re.split()

将一个字符串按照正则表达式匹配结果进行分割,返回列表类型

re.finditer()

搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

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

 

 

 

 

 

 

 

 

 

 

例如:

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

其中:

  • pattern : 正则表达式的字符串或原生字符串表示 
  • string : 待匹配字符串 
  • flags : 正则表达式使用时的控制标记
常用标记 说明
re.I re.IGNORECASE 忽略正则表达式的大小写,[A‐Z]能够匹配小写字符
re.M re.MULTILINE 正则表达式中的^操作符能够将给定字符串的每行当作匹配开始 
re.S re.DOTALL

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

 

 

 

 

 

 

 

>>> import re
>>> m = re.search(r[1-9]d{5}, abc1234567)
>>> if m:
...     m.group(0)
...
123456

还有一种写法是这样的

>>> import re
>>> t = re.compile(r[1-9]d{5})
>>> m = t.search(abc1234567)
>>> if m:
...     m.group(0)
...
123456

第二种写法的好处是:当要对一个正则表达式进行多次字符串匹配时,可以只编译一次,匹配多次,可以提升效率

3.Match对象

属性 说明
.string

待匹配的文本

.re

匹配时使用的patter对象(正则表达式)

.pos

正则表达式搜索文本的开始位置

.endpos 正则表达式搜索文本的结束位置
.group(0)

获得匹配后的字符串

.start()

匹配字符串在原始字符串的开始位置

.end()

匹配字符串在原始字符串的结束位置

.span() 返回(.start(), .end())

 

 

 

 

 

 

 

 

 

 

 

 

4.re库的贪婪匹配

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

例如

>>> match = re.search(rPY.*NPYANBNCNDN) 
>>> match.group(0)
‘PYANBNCNDN‘

那么,如何输出最小的匹配呢

可以在.*后面加个?,就像这样

>>> match = re.search(rPY.*?NPYANBNCNDN) 
>>> match.group(0) PYAN

还有一些其他的操作符

操作符 说明
*?

前一个字符0次或无限次扩展,小匹配

+?

前一个字符1次或无限次扩展,小匹配

?? 前一个字符0次或1次扩展,小匹配
{m,n}?

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

 

 

 

 

 

 

 

-------------完




以上是关于python正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

python 正则表达式

python成长之路第三篇_正则表达式

python成长之路第三篇_正则表达式

python 正则表达式 re模块基础

Python学习笔记之正则表达式

python基础学习(十三)