Python-正则表达式

正则表达式 regular expression regex RE

正则表达式是用来简洁表达一组字符串的表达式,主要用在字符串匹配中
正则表达式功能强大,可谓’一行胜千言’

.正则表达式使用前需要进行编译,
就是将符合正则表达式语法的字符串编译成一个特征,用以检测其他字符串是否符合该特征

正则表达式由字符和操作符组成:

操作符

.  	 	表示任何字符
[ ]  	字符集,对单个字符给出取值范围
[^ ]   	非字符集,对单个字符给出排除范围  	[^abc]表示非a或b或c的单个字符
* 		一个字符0次或多次扩展
+ 		一个字符1次或多次扩展
? 		前一个字符0次或1次扩展  		abc?表示ab,abc
|		左右表达式任意一个			abc|def 表示abc,def
{n}		扩展前一个字符n次 			ab{2}	表示abb	
{m,n}	扩展前一个字符m到n次			ab{1,2} 表示ab,abb
^		匹配字符串开头				^abc表示abc且在一个字符串的开头
$		匹配字符串结尾				abc$表示abc且在一个字符串的结尾
()		分组标记,内部只能用|操作符	(abc)表示abc,(abc|def)表示abc,def
\d		数字,等价于[0-9]
\w		单词字符,等价于[A-Za-z0-9_]	

PY[^TH]?ON 	'PYON' 'PYaON' 'PYcON'... 即匹配PY开头ON结尾中间没有或有一个字符但是不是T或H的字符串
PY{:3}N  把大括号前的字符扩展03次 ‘PN’ ‘PYN’ ‘PYYYN’

^[A-Za-z]+$ 	由26个字母组成的字符串 其中^ $规定要匹配开头和结尾
^-?\d+$			整数形式的字符串
^[0-9]*[1-9][0-9]*$	正整数形式的字符串
[1-9]\d{5}		中国境内邮政编码6

正则表达式类型:

raw string 类型(原生字符串类型指不包含转义符的字符串)

例如r'[1-9]\d{5}' re库使用raw string类型表示正则表达式,表示为r'text'

string 类型(包含转义符,比较繁琐)

'[1-9]\\d{5}'

re库主要功能函数

re模块中的常用函数
1 search(): 

字符串查找是否存在匹配的内容,返回第一个匹配内容,没找到返回None

2 match():

从字符串开始位置起开始匹配,如果找到返回match对象,没找到返回None。如果存在但不是在起始位置也不算。

3 findall():

以列表类型返回所有match对象,如果失败返回None

4 finditer():

在字符串中匹配,如果成功返回match可迭代对象,并可以通过循环方式对每一个匹配对象进行相关操作,如果失败返回None

for m in re.finditer(r'[1-9]\d{5}','BIT100081 TSU100084'):
    if m:
        print(m.group(0))
        
100081
100084

5 split():

按照匹配的字符串进行分割
可添加参数maxsplit=n 表示最大将字符串分割成多少个,超过最大限制则一起输出。

6 sub():

替换匹配的子字符串,返回替换之后的字符串,可添加参数限制最多替换多少个

m = re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 TSU100084')
print(m)
BIT:zipcode TSU:zipcode

re库的两种用法

rst = re.search(r'[1-9]\d{5}','BIT100081 TSU100084')#一次性使用

pat = re.compile(r'[1-9]\d{5}')
rst = pat.search('BIT100081 TSU100084')#面向对象,多次使用

re库的贪婪匹配和最小匹配

当有多个子串符合匹配条件时默认输出匹配最长的子串
当有操作符匹配不同长度子串时都可以加一个问号表示最小匹配

rst = re.search(r'PY.*N','PYXNXXXN')
print(rst.group(0))

rst = re.search(r'PY.*?N','PYXXXNXXXN')
print(rst.group(0))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值