Python正则表达式

本文详细介绍了Python正则表达式的概念、基本组件及常用函数,并通过实例演示了如何在字符串中查找和匹配模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习Python自然而然就不得不面对正则表达式这个难题。当初在没有学习Python之前,自己也曾经尝试着学习过正则表达式,但是那时候感觉很麻烦,很难懂,结果就是不了了之。但是现在学习Python我用的书是《Python基础教程(第二版)》,这本书中对re模块的讲解很简单易懂,内容不多但起码把人领进门了,之后的学习看个人了。

首先先了解正则表达式的定义:就是匹配文本片段的模式。

学习正则表达式必须要了解几个名词:通配符,特殊转移字符,字符集,选择符,重复子模式。

通配符:.号就是通配符,因为.可以匹配文本中任意一个除换行符之外的字符,但是一个点号只能匹配一个字符。像'.ython'可以匹配像‘python’,'jython','lython'这样的字符串。

字符集:用于匹配字符集当中包括的字符,使用中括号括住字符串来创建字符集。'[abc]'这样的正则表达式,其中[abc]就是字符集。它可以匹配'a','b','c'且只能匹配这三种字符串。也可以使用范围了表示字符集,例如'[a-f]'表示的就是匹配a到f中的任意一个字母。当一个字符集有多个范围的时候,可以讲这几个范围连续写,如:'[a-f0-9]'这就表示匹配a到f或者0到9中的字符。字符集还可以反转,在开头使用^,’[^abc]‘表示的就是匹配除了a,b,c,之外的任意一个字符。一个字符集只能对应匹配一个字符。

特殊转义字符:先看一下,如果想要匹配一个网站,使用’xxx.xxxx.xxx‘类似的正则表达式肯定是不可以的,因为点号是通配符,它会匹配任意的一个处理换行符之外的字符,如果想要匹配一个点号,那么就需要对正则表达式中的点号进行转义,在之前加两个\,为什么要两个\呢。因为\在re模块中也是特殊字符,获取到\需要对\进行一个转义,所以要进行两次转义才能获得点号。还有一种更方便直观一点的方法就是使用Python中的原始字符串,r'xxx\.xxxx\.xxx'这样就更方便一点。

在字符串的每个字符都各不相同的情况下,字符集是很好用的,但是如果只想匹配字符串,那样就不能使用字符集或者通配符来匹配了。那就要用到用于选择项的特殊字符,管道符 | 。如果想匹配字符串'python'和'perl'那样就可以将模式写成‘python|perl’。
子模式:有些时候不需要对整个模式使用选择运算符,可以将需要使用选择运算符的部分用圆括号括起,被括住的部分被称为子模式。
可选项:子模式后面加上问号就变成了可选项,说明这一部分可以出现在匹配的字符串中,也可以不出现。
重复子模式:设置子模式出现的次数
(pattern)*:允许模式重复0次或多次
(pattern)+:允许模式重复1次或多次
(pattern){m,n}:允许模式出现[m,n]次
(pattern){m}:模式出现m次
(pattern){m,}:允许模式出现不少于m次
字符串的开始和结尾:
如果想模式匹配的字符串是在匹配的字符串的开始,使用脱字符^标记开始,想模式匹配的字符串是在匹配的字符串的结尾,使用美元符号$标记结尾。

然后是Python的re模块中一些比较重要的函数:
compile(pattern[,flag]) 根据包含的正则表达式的字符串创建模式对象,参数中传入一个正则表达式的字符串,compile()函数会将这个字符串转换为一个模式对象(RegexObject)。因为在调用模块函数的时候,如果传入表达式字符串最终都会转换为一个模式对象,所以对于程序频繁使用的表达式,最好使用compile()编译一下,可以提高效率。

str='[a-z]+\.jpg'
	regex=compile(str)
search(pattern,string[,flag]) 在字符串中寻找模式。在给定的字符串中寻找到第一个匹配的子字符串之后就返回一个MatchObject对象,其值为True,若果没有找到的话,返回一个None,其值为False.

	str='[a-z]\.jpg'
	regex=compile(str)
	if re.search(regex,'sdfhjsjdfsjdhfj.jpg'):
		print 'Fond it!'
	else:
		print 'Not Fond it!'




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值